ทดลอง Deploy PHP ด้วย Elastic Beanstalk และลองเชื่อมต่อกับ RDS

เราสามารถ Deploy โปรเจกต์ของเราขึ้นไปแสดงบนเว็บไซต์ด้วย Elastic Beanstalk ได้ง่ายๆ ซึ่งในบทความครั้งนี้ผมจะแนะนำวิธี Deploy PHP ด้วย Elastic Beanstalk และวิธีแก้ไขโปรเจกต์ที่ได้เผยแพร่ไปแล้ว นอกจากนี้จะทำการเชื่อมต่อกับ RDS เพื่อเพิ่มข้อมูลลงใน Database และแสดงข้อมูลผ่านหน้า (Web Browser) ครับ

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

ครั้งนี้ผมจะมาอธิบายเกี่ยวกับการ ทดลอง Deploy PHP ด้วย Elastic Beanstalk และลองเชื่อมต่อกับ RDS ครับ

เป้าหมายในการทำ

ผมจะสร้าง Applications และ Environments ใน Elastic Beanstalk โดยใช้ Platform PHP และ Deploy PHP ด้วย Environments จากนั้นทำการเชื่อมต่อไปยัง RDS และเพิ่มข้อมูลลงใน Database ของ RDS ตามด้วยสร้างโปรแกรมที่ใช้ในการแสดงข้อมูล MySQL และทดสอบการแสดงข้อมูลบนหน้าจอ (Web Browser) ครับ

สร้าง Key Pairs และ Security Groups เพื่อใช้สำหรับ Elastic Beanstalk

ขั้นตอนนี้ผมจะสร้าง Key Pairs เตรียมไว้เพื่อใช้กับ Instance ที่จะสร้างใน Environments ของ Elastic Beanstalk และสร้าง Security Groups เพื่อใช้สำหรับ Elastic Beanstalk

สร้าง Key Pairs เพื่อใช้กับ Instance ที่สร้างจาก Elastic Beanstalk

ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การ Create Key Pair

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


สร้าง Security Groups เพื่อใช้สำหรับ Elastic Beanstalk

ขั้นตอนนี้เป็นการสร้าง Security Group โดยใช้ชื่อว่าtinnakorn-test-eb

เข้ามาที่ Service Amazon EC2 มาที่เมนูด้านซ้ายหัวข้อ ▼ Network & Security แล้วคลิกSecurity Groups

คลิกCreate security group

เมื่อเข้ามาหน้า Create security group แล้วให้ตั้งค่า Basic details:
» Security group name:tinnakorn-test-eb(ชื่ออะไรก็ได้)
» Description:tinnakorn-test-eb(ใส่อะไรก็ได้)

จากนั้นเลื่อนลงมาด้านล่างสุด คลิกปุ่มCreate security group

การสร้าง Security Groups เพื่อใช้สำหรับ Elastic Beanstalk ก็เสร็จเรียบร้อยแล้วครับ ให้ทำขั้นตอนถัดไปได้เลยครับ

วิธีการสร้าง RDS

ให้ทำการสร้าง RDS ตามลิงก์ด้านล่างนี้ได้เลยครับ (ทำเฉพาะหัวข้อที่ระบุไว้ด้านล่างนี้เท่านั้นครับ)

ตัวอย่างตั้งค่าการสร้าง RDS และเชื่อมต่อจาก EC2 บน AWS ในบทความนี้

Create security group
※Basic details
» Security group name:tinnakorn-test-rds
» Description:tinnakorn-test-rds

※Inbound rules
Inbound:MySQL/Aurora| Source:tinnakorn-test-eb(เลือก Security Group ของ tinnakorn-test-eb ที่สร้างขึ้นเมื่อสักครู่นี้)

Create database
※Engine options
» Engine type: ◉MySQL
» Edition: ◉MySQL Community
» Version:MySQL 8.0.28

※Templates
»Production

※Availability and durability
» Deployment options: ◉Single DB instance

※Settings
» DB instance identifier:tinnakorn-test-rds

▼ Credentials Settings
» Master username:admin
» Master password:PassW0rd
» Confirm password:PassW0rd

※Instance configuration
» DB instance class: ◉ Burstable classes (includes t classes)
[db.t3.micro ▼]

※Storage
» Storage type:General Purpose SSD (gp2)
» Allocated storage:20GiB

※Connectivity
» Public access: ◉No
» Existing VPC security groups:tinnakorn-test-rds

※Database authentication
» Database authentication options: ◉Password authentication

※Additional configuration
Database options
» Initial database name:tinnakorn(ตั้งชื่อ Database)

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

เตรียมไฟล์สำหรับใช้ใน Elastic Beanstalk

ขั้นตอนนี้ผมจะสร้างไฟล์ info.php บน Windows เตรียมไว้ใช้อัปโหลดใน Elastic Beanstalk ครับ

สร้างไฟล์ info.php ด้วย Notepad บน Windows

เปิด Notepad ขึ้นมา แล้ว Copy Code ด้านล่างนี้วางลงที่นี่

<?php
phpinfo();

เมื่อวาง Code เสร็จแล้ว มาที่มุมซ้ายบน คลิกFileและเลือกSave

เราจะ Save ไฟล์ลงไว้ที่ไหนก็ได้ แต่ในตัวอย่างนี้คือ:
เลือกDesktop
File name:info.php(ตั้งชื่อไฟล์ตามนี้นะครับ)
Save as type:All files (*.*)
Encoding:UTF-8
คลิกSave

เมื่อคลิก Save แล้วก็จะได้ตามรูปภาพด้านล่างนี้ (ที่สำคัญให้ตรวจสอบชื่อไฟล์ใน Notepad ที่มุมซ้ายบน ถ้าเป็นชื่อinfo.php- Notepad ก็ถือว่าการสร้างไฟล์ถูกต้อง)

ทีนี้ปิด Notepad ไปได้เลย จากนั้นคลิกขวาที่ไฟล์info.phpและเลือกCompress to ZIP fileเพื่อบีบอัดไฟล์ให้เป็นinfo.zip

เมื่อบีบอัดไฟล์ให้เป็น info.zip เสร็จแล้ว ก็จะได้ไอคอนแบบนี้ (สำหรับคนที่ใช้ WinRAR หรือโปรแกรมแตกไฟล์อื่นๆ ก็อาจจะเป็นไอคอนตามโปรแกรมที่เรากำลังใช้งานอยู่ครับ)

จากนั้นทำการเปลี่ยนชื่อไฟล์ info.zip ให้เป็นวันที่และเวลาปัจจุบัน เช่น20220707_1203.zipเป็นต้น (แนะนำให้ตั้งชื่อไฟล์ตามวันที่และเวลา)

จากนั้นคลิกเข้ามาที่ไฟล์20220707_1203.zipของเราเพื่อตรวจสอบไฟล์ที่เราทำการบีบอัดไว้

การสร้าง Application ใน Elastic Beanstalk

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

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

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

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

ขั้นตอนต่อไปนี้คือการอธิบายสำหรับคนที่ยังไม่เคยสร้าง Application ด้วย Elastic Beanstalk
กรณีที่ยังไม่ได้สร้าง Application ด้วย Elastic Beanstalk ตอนสร้างจะแสดงหน้าจอแบบนี้

※สิ่งที่ต้องทำ
・การสร้าง Appilcation + การสร้าง Environments:Sample
・ลบ Environments:Sample
・สร้าง Environments ใหม่ขึ้นมา

กรณีที่มีการสร้าง Application ด้วย Elastic Beanstalk มาก่อนแล้ว ตอนสร้างจะแสดงหน้าจอแบบนี้

※สิ่งที่ต้องทำ
・สร้าง Appilcation
・สร้าง Environments

ดังนั้นสำหรับคนที่เคยสร้าง Application มาก่อนแล้ว กดให้ข้ามไปเฉพาะส่วนของ 「 การสร้าง Environments:Sample และ การ Terminate Environments:Sample 」 เท่านั้น โดยกดข้ามไปที่หัวข้อ การสร้าง Environment ใน Elastic Beanstalk ได้เลยครับ

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

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

รอการเริ่มต้นระบบสักครู่

เมื่อเสร็จแล้วจะแสดงหน้าจอแบบนี้

Terminate environment ที่ถูกสร้างขึ้นอัตโนมัติ

ขั้นตอนนี้ให้ทำการ Terminate environment ที่ถูกสร้างขึ้นใน Applications โดยอัตโนมัติทิ้งไป
เพราะว่าเราไม่ได้ใช้ environment:[Yourname]-env นี้ในการ Deploy PHP ครับ

มาที่มุมขวาบน คลิกปุ่มActionsและเลือกTerminate environment

ยืนยันการ Terminate โดยคัดลอกชื่อ environment ของเรามาใส่ช่องด้านล่าง และกดปุ่มTerminate

รอการ Terminate environment สักครู่ครับ

เมื่อ Terminate environment เสร็จแล้ว จะแสดงหน้าจอแบบนี้
จากนั้นให้คลิกที่ Application name ของเรา เช่นtinnakorn-test

เมื่อเข้ามาที่ Application ของเราแล้วจะแสดงหน้าจอแบบนี้

การสร้าง Environment ใน Elastic Beanstalk

ขั้นตอนนี้ผมจะทำการสร้าง Environment ที่ใช้สำหรับการ Deploy PHP ครับ

มาที่ด้านบนขวา คลิกปุ่มCreate a new environment

การตั้งค่าในหัวข้อ Select environment tier:
» ◉ Web server environment
» คลิกปุ่มSelect

การตั้งค่าในหัวข้อ Environment information:
» Environment name:tinnakorn-test-20220707(ชื่ออะไรก็ได้)
» Domain:tinnakorn-test-20220707
» กดปุ่มCheck availability

ถ้าขึ้นสถานะ [ ✅ tinnakorn-test-20220707.ap-southeast-1.elasticbeanstalk.com is available. ] แบบนี้ก็คือเราสามารถใช้ได้ (ถ้าชื่อซ้ำกับคนอื่นก็จะขึ้น Error เพราะไม่สามารถใช้ชื่อซ้ำกันได้)

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

การตั้งค่าในหัวข้อ Application code:
» เลือก ◉ Upload your code
» Version label:20220707_1203(แนะนำให้ใส่ชื่อเดียวกับไฟล์.zipที่บีบอัดไว้ก่อนหน้านี้)
» Source code origin: ◉ Local file
» คลิกปุ่มChoose file

ค้นหาไฟล์20220707_1203.zipจากที่อยู่ไฟล์ของเรา (ของผมจะอยู่ที่ Desktop)
เลือกไฟล์และคลิกปุ่มOpen

เมื่ออัปโหลดไฟล์เสร็จแล้วจะมี [ File name : 20220707_1203.zip ] แสดงขึ้นมา
และจะแสดงสถานะ [ ✅ File successfully uploaded ] แบบนี้
จากนั้นคลิกปุ่มConfigure more options


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

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

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

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

ถัดมาหัวข้อ EC2 security groups:
» Group name: ติ๊กtinnakorn-test-eb (เลือก Security groups ที่สร้างไว้สำหรับ Elastic Beanstalk)
» คลิกปุ่มSave

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

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

การตั้งค่าหน้า Modify capacity หัวข้อ Auto scaling group:
» เลื่อนลงมาข้างล่างที่ Instance types แล้วคลิกที่ t2.micro และ t2.small ออกไป

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

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

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

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

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

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

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

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

การตั้งค่าหน้า Modify managed updates หัวข้อ Managed platform updates:
» Managed updates: ติ๊ก ✅ ออกให้เป็น □ Enabled (เพื่อไม่ให้มีการอัปเดต)
» คลิกปุ่มSave

เมื่อตั้งค่าในหน้า Configure [Your_name_env] เสร็จแล้ว เลื่อนลงมาด้านล่างสุด คลิกปุ่มCreate environment

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

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

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

เมื่อคลิก URL เข้ามาแล้วจะแสดงหน้าจอ 403 Forbidden แบบนี้


ทีนี้ให้เราเพิ่มชื่อไฟล์/info.phpต่อท้ายลิงก์ที่คลิกจากหน้า Environments ของเราตามตัวอย่างด้านล่างนี้ครับ

http://[URL Elastic Beanstalk]/info.php

ถ้าแสดงหน้าจอแบบนี้ การ Deploy PHP (info.php) ก็เสร็จสมบูรณ์ครับ

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

สิ่งที่จะทำในขั้นตอนนี้คือ:
・ตรวจสอบ Instance ID จาก Health
・ตรวจสอบ IP Address จาก EC2
・ทำการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
・ตรวจสอบไฟล์ info.php ที่อัปโหลดขึ้นไป ใน Elastic Beanstalk

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

ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: ตรวจสอบ Instance ID จาก Health

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

ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: ตรวจสอบ IP Address จาก EC2

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

ในขั้นตอนนี้ให้ทำการเชื่อมต่อกับ EC2 ที่สร้างจาก Environments ใน 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-1-143:~

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

 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-1-143 ~]$


รันคำสั่งนี้เพื่อเข้าสู่ระบบในฐานะผู้ใช้ที่มีสิทธิ์ root (ถ้ารันคำสั่งนี้แล้วข้ามขั้นตอนนี้ไปได้เลยครับ)

sudo su -

Output (example)

root@ip-172-31-1-143:~

[ec2-user@ip-172-31-1-143 ~]$ sudo su -
[root@ip-172-31-1-143 ~]#

ตรวจสอบไฟล์ info.php ที่อัปโหลดขึ้นไป ใน Elastic Beanstalk

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

cd /var/www/html/

Output (example)

root@ip-172-31-1-143:~

[root@ip-172-31-1-143 ~]# cd /var/www/html/
[root@ip-172-31-1-143 html]#


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

ll

Output (example)
จะเห็นว่ามีไฟล์ info.php อยู่ในโฟลเดอร์ html นี้

root@ip-172-31-1-143:~

[root@ip-172-31-1-143 html]# ll
total 4
-rw-r--r-- 1 webapp webapp 17 Jul  6  2022 info.php
[root@ip-172-31-1-143 html]#

ทดสอบการเชื่อมต่อจาก EC2 ไปยัง RDS ด้วยคำสั่ง MySQL

รันคำสั่งนี้เพื่อทดสอบการเชื่อมต่อจาก EC2 ไปยัง RDS (ก่อนรันคำสั่งเปลี่ยนข้อมูลใน [ ] ให้เป็นของคุณ)
Endpoint RDS: (-h [your_endpoint_rds])
Master username: (-u admin)
Master password: (-p[your_password_rds])
Database Name RDS: ([your_database_name])

mysql -h [your_endpoint_rds] -u admin -p[your_password_rds] [your_database_name]

Output (example)
ถ้าแสดงหน้าจอแบบนี้ ก็ถือว่าเราสามารถเชื่อมต่อไปยัง RDS ได้ครับ

root@ip-172-31-1-143:~

[root@ip-172-31-1-143 html]# mysql -h tinnakorn-test-rds.xxxxxxxxxxxx.ap-southeast-1.rds.amazonaws.com -u admin -pPassW0rd tinnakorn
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 63
Server version: 8.0.28 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [tinnakorn]>


เมื่อเข้ามาหน้า MySQL Prompt ได้แล้ว ให้ทำการสร้าง Table ตามคำสั่งด้านล่างนี้ (test คือชื่อ Table ซึ่งคุณสามารถใช้ชื่ออื่นก็ได้ครับ)

create table test (id int, message varchar(255));

Output (example)

root@ip-172-31-1-143:~

MySQL [tinnakorn]> create table test (id int, message varchar(255));
Query OK, 0 rows affected (0.03 sec)

MySQL [tinnakorn]>


เมื่อสร้าง Table เสร็จแล้วให้รันคำสั่งนี้เพื่อเพิ่มข้อมูลลงใน Table:test

insert into test values (1, "text1");

Output (example)

root@ip-172-31-1-143:~

MySQL [tinnakorn]> insert into test values (1, "text1");
Query OK, 1 row affected (0.01 sec)

MySQL [tinnakorn]>


รันคำสั่งนี้เพื่อแสดงข้อมูล Table

select * from test;

Output (example)

root@ip-172-31-1-143:~

MySQL [tinnakorn]> select * from test;
+------+---------+
| id   | message |
+------+---------+
|    1 | text1   |
+------+---------+
1 row in set (0.00 sec)

MySQL [tinnakorn]>


เมื่อทำการเพิ่มข้อมูลเสร็จแล้ว รันคำสั่งนี้เพื่อออกจาก MySQL Prompt กลับมาที่ html

quit

Output (example)

root@ip-172-31-1-143:~

MySQL [tinnakorn]> quit
Bye
[root@ip-172-31-1-143 html]#

เมื่อสร้าง Table และเพิ่มข้อมูลลงใน Table เสร็จแล้ว ให้ทำขั้นตอนต่อไปได้เลยครับ

การ Deploy PHP และแสดงข้อมูลจากหน้า Web Browser

ในหัวข้อนี้ผมจะแนะนำวิธีการแก้ไข (เปลี่ยนตำแหน่ง) โปรเจกต์ที่ Deploy ไปแล้วครับ

ผมจะทำการสร้างโปรแกรมที่ใช้ในการแสดงข้อมูล MySQL บนหน้าจอ (Web Browser) โดยเขียนลงในไฟล์ list.php เพื่อให้สามารถตรวจสอบข้อมูลที่ผมได้เพิ่มลงใน Table จากหน้าจอ (Web Browser) ได้ครับ

สร้างโปรแกรมที่ใช้แสดงข้อมูล MySQL บนหน้าจอ (Web Browser) ด้วย Notepad บน Windows

เปิด Notepad ขึ้นมา แล้ว Copy Code ด้านล่างนี้วางลงที่นี่
จากนั้นเปลี่ยนข้อมูล [$db_host, $db_name, $db_user, $db_password] ให้เป็นของคุณ
・$db_host: Endpoint RDS (เมื่อสร้าง RDS เสร็จก็จะได้ Endpoint มาและให้ Copy Endpoint มาใส่ที่นี่)
・$db_name: Database Name RDS
・$db_user: Master username
・$db_password: Master password

<?php
$db_host = '[your_endpoint_rds]';
$db_port = '3306';
$db_name = '[your_database_name]';
$db_user = 'admin';
$db_password = '[your_password_rds]';

$con = mysqli_connect($db_host, $db_user, $db_password, $db_name);
$con->set_charset('utf8mb4');

$sql = "SELECT * FROM test";
if ($result = mysqli_query($con, $sql)) {
    while ($obj = mysqli_fetch_object($result)) {
        echo "$obj->id $obj->message<br>\n";
    }
    mysqli_free_result($result);
}
mysqli_close($con);
?>

Output (example)

เมื่อเปลี่ยนข้อมูล [$db_host, $db_name, $db_user, $db_password] ให้เป็นของเราเสร็จแล้ว
มาที่มุมซ้ายบน คลิกFileและเลือกSave

เราจะ Save ไฟล์ลงไว้ที่ไหนก็ได้ แต่ในตัวอย่างนี้คือ:
เลือกDesktop
File name:list.php(ตั้งชื่อไฟล์ตามนี้นะครับ)
Save as type:All files (*.*)
Encoding:UTF-8
คลิกSave

เมื่อคลิก Save แล้วก็จะได้ตามรูปภาพด้านล่างนี้ (ที่สำคัญให้ตรวจสอบชื่อไฟล์ใน Notepad ที่มุมซ้ายบน ถ้าเป็นชื่อlist.php- Notepad ก็ถือว่าการสร้างไฟล์ถูกต้อง)

ทีนี้ปิด Notepad ไปได้เลย แล้วใช้เมาส์ลากครอบไฟล์ [ info.php กับ list.php ] และคลิกขวาที่ไฟล์ใดไฟล์หนึ่ง
จากนั้นเลือกCompress to ZIP fileเพื่อบีบอัดไฟล์info.php กับ list.phpเข้าด้วยกัน (ครั้งนี้ต้องทำการบีบอัดเข้าด้วยกันทั้ง 2 ไฟล์ เพราะว่าถ้า Deploy ไปแล้ว ไฟล์ info.php ที่อัปโหลดไปก่อนหน้านั้นจะถูกลบไปครับ)

เมื่อบีบอัดไฟล์รวมกันเสร็จแล้ว ก็จะได้ไอคอนแบบนี้ (ไม่ว่าจะเป็นชื่อ list.zip หรือ info.zip ก็ไม่เป็นไรครับ เพราะชื่อจะถูกสร้างตามเม้าส์ที่เราชี้ไฟล์นั้นก่อนทำการบีบอัดนั่นเอง)

ต่อไปให้ทำการเปลี่ยนชื่อไฟล์ที่บีบอัดเมื่อสักครู่นี้ให้เป็นวันที่และเวลาปัจจุบัน เช่น20220707_1457.zipเป็นต้น (แนะนำให้ตั้งชื่อไฟล์ตามวันที่และเวลา)

จากนั้นคลิกเข้ามาที่ไฟล์20220707_1457.zipของเราเพื่อตรวจสอบไฟล์ [ info.php กับ list.php ] ที่เราทำการบีบอัดไว้

ตอนนี้ผมได้เตรียมไฟล์เพื่อใช้สำหรับ Deploy เสร็จเรียบร้อยแล้วครับ ผมก็จะเริ่มทำขั้นตอนถัดไปเลยครับ

Deploy PHP ขึ้นไปยัง Elastic Beanstalk และแสดงข้อมูลจากหน้า Web Browser

ขั้นตอนนี้ผมจะทำการ Deploy PHP โดยใช้ไฟล์20220707_1457.zipที่บีบอัดไว้เมื่อสักครู่นี้ขึ้นไปยัง Elastic Beanstalk และแสดงข้อมูลที่ผมได้เพิ่มลงใน Database RDS จากหน้า Web Browser ครับ

มาที่เมนูด้านซ้ายตรงชื่อ Application ของเรา เช่น▼ tinnakorn-testและเลือกApplication versions

คลิกปุ่มUpload

ตั้งค่าการอัปโหลดในหัวข้อ Upload Application Version:
» Version label:20220707_1457(แนะนำให้ใส่ชื่อเดียวกับไฟล์.zipที่บีบอัดไว้เมื่อสักครู่นี้)
» คลิกปุ่มChoose file

ค้นหาไฟล์20220707_1457.zipจากที่อยู่ไฟล์ของเรา (ของผมจะอยู่ที่ Desktop)
เลือกไฟล์และคลิกปุ่มOpen

เมื่ออัปโหลดเสร็จแล้วจะแสดงเป็น [ File name: 20220707_1457.zip ✅ ] แบบนี้
จากนั้นให้คลิกUploadได้เลยครับ

ติ๊กที่✅ 20220707_1457.zipและคลิกActions ▼ตามด้วยเลือกDeploy

คลิกDeploy

เมื่อเสร็จแล้วจะแสดงข้อความเหมือนกับรูปภาพ

ตรวจสอบ Events

มาที่เมนูด้านซ้าย คลิกที่ Environments ของเรา เช่น▼ tinnakorn-test-20220707และเลือกEvents

มาที่ด้านขวา แล้วดู Events ตรงช่อง Details ตามตัวเลขดังนี้:
เริ่มต้นการ Deploy และเริ่มทำการเปลี่ยนแปลงโปรแกรม
เสร็จสิ้นการ Deploy และการเปลี่ยนแปลงโปรแกรมก็เสร็จสมบูรณ์

ตรวจสอบ Application ที่ Deployed

ตรวจสอบไฟล์ที่ Deploy ไปแล้วใน PuTTY

กลับมาที่ PuTTY แล้วรันคำสั่งนี้เพื่อเข้าไปที่/var/www/htmlอีกครั้ง (ทุกครั้งที่มีการ Deploy โปรเจกต์ Path [/var/www/html] จะถูกลบและรีเซ็ตใหม่ทุกครั้งครับ)

cd /var/www/html/

Output (example)

root@ip-172-31-1-143:~

[root@ip-172-31-1-143 html]# cd /var/www/html/
[root@ip-172-31-1-143 html]#


รันคำสั่งนี้เพื่อตรวจสอบไฟล์ที่ Deploy ไปยัง Elastic Beanstalk ใน html

ll

Output (example)
จะเห็นว่ามีไฟล์ [info.php และ list.php] อยู่ใน html

root@ip-172-31-1-143:~

[root@ip-172-31-1-143 html]# ll
total 8
-rw-r--r-- 1 webapp webapp  17 Jul  6 11:17 info.php
-rw-r--r-- 1 webapp webapp 521 Jul  7  2022 list.php
[root@ip-172-31-1-143 html]#

ตรวจสอบไฟล์ที่ Deploy ไปแล้วจากหน้า (Web Browser)

กลับมาที่หน้า (Web Browser) แล้วทำการ Reload อีกครั้ง จะเห็นว่าสามารถแสดงหน้าหลักของ phpinfo ของไฟล์ info.php ได้เหมือนเดิมครับ

ต่อไปให้ทดสอบไฟล์ list.php โดยเปลี่ยนเป็น URL ตามด้านล่างนี้ครับ

http://[URL Elastic Beanstalk]/list.php


จะเห็นว่าสามารถแสดงหน้าข้อมูลที่ผมเพิ่มลงใน Table: test ได้

ทดสอบผลการ Deploy PHP

เพิ่มข้อมูลลงใน Table

ผมจะเพิ่มข้อมูล [ id: 2, message: text2 | id: 3, message: text3 ] ลงใน Table:test อีกครั้ง

รันคำสั่งนี้เพื่อทดสอบการเชื่อมต่อจาก EC2 ไปยัง RDS อีกครั้ง (ก่อนรันคำสั่งเปลี่ยนข้อมูลใน [ ] ให้เป็นของคุณ)
Endpoint RDS: (-h [your_endpoint_rds])
Master username: (-u admin)
Master password: (-p[your_password_rds])
Database Name RDS: ([your_database_name])

mysql -h [your_endpoint_rds] -u admin -p[your_password_rds] [your_database_name]

Output (example)

root@ip-172-31-1-143:~

[root@ip-172-31-1-143 html]# mysql -h tinnakorn-test-rds.xxxxxxxxxxxx.ap-southeast-1.rds.amazonaws.com -u admin -pPassW0rd tinnakorn
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 86
Server version: 8.0.28 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [tinnakorn]>


รันคำสั่งนี้เพื่อเพิ่มข้อมูล [ id: 2, message: text2 | id: 3, message: text3 ] ลงใน Table:testและแสดงผลข้อมูล (สามารถรันคำสั่งพร้อมกันได้เลยครับ)

insert into test values (2, "text2");
insert into test values (3, "text3");
select * from test;

Output (example)

root@ip-172-31-1-143:~

MySQL [tinnakorn]> insert into test values (2, "text2");
Query OK, 1 row affected (0.00 sec)

MySQL [tinnakorn]> insert into test values (3, "text3");
Query OK, 1 row affected (0.00 sec)

MySQL [tinnakorn]> select * from test;
+------+---------+
| id   | message |
+------+---------+
|    1 | text1   |
|    2 | text2   |
|    3 | text3   |
+------+---------+
3 rows in set (0.00 sec)

MySQL [tinnakorn]>

ตรวจสอบการแสดงข้อมูลในหน้า (Web Browser)

หลังจากที่ผมได้เพิ่มข้อมูลลงใน Table ไปแล้ว ทีนี้ผมจะตรวจสอบข้อมูลในหน้า (Web Browser) ของไฟล์ list.php ครับ

กลับมาที่หน้า (Web Browser) แล้วทำการ Reload อีกครั้ง จะเห็นว่ามีข้อมูล [ 2 text2 และ 3 text3 ] เพิ่มขึ้นมาครับ

เพียงเท่านี้เราก็สามารถ Deploy ไฟล์ [ info.php และ list.php ] ขึ้นไปยัง Elastic Beanstalk และแสดงข้อมูลตามที่เราเพิ่มลงใน Table ของ Database RDS ได้แล้วครับ

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

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

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

  • RDS
    • Databases
  • Elastic Beanstalk
    • Environments (Terminate)
    • Applications
  • Amazon EC2
    • Key Pairs
    • Security Groups (RDS)
    • Security Groups (Elastic Beanstalk)

วิธีการลบ RDS

ในหัวข้อนี้คือการลบ RDS

ดูตัวอย่างที่นี่เฉพาะหัวข้อหลักนี้: วิธีการลบ RDS

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

ในหัวข้อนี้คือการลบ [ Environments, Applications ] ใน Elastic Beanstalk และลบ [ Key Pairs ] ใน Amazon EC2

ดูตัวอย่างที่นี่เฉพาะหัวข้อย่อยนี้: การลบ Environments และ Applications ใน Elastic Beanstalk

วิธีการลบ Security Groups ใน Amazon EC2

ในหัวข้อนี้คือการลบ Security Groups ของ RDS และ Elastic Beanstalk ใน Amazon EC2

เข้ามาที่ 「 Service Amazon EC2 」 แล้วทำการลบ Security Groups ของ RDS และ Elastic Beanstalk
โดยการลบนี้ต้องทำการลบ Security Groups (RDS) ก่อน แล้วค่อยลบ Security Groups (Elastic Beanstalk)

※ลบ Security Group (RDS)
ต้องรอจนกว่าการลบ RDS เสร็จสิ้นก่อน จึงจะสามารถลบ Security Group ของ RDS ได้

※ลบ Security Group (Elastic Beanstalk)
ต้องรอจนกว่าการ Terminated Environments และการลบ Applications ใน Elastic Beanstalk เสร็จสิ้นก่อน จึงจะสามารถลบ Security Group ของ Elastic Beanstalk ได้

สรุป

การสาธิตนี้เป็นการ Deploy PHP (ไฟล์ info.php กับ list.php) ขึ้นไปยัง Elastic Beanstalk จากนั้นทดสอบการเชื่อมต่อไปยัง RDS และเพิ่มข้อมูลใน Database ตามด้วยทดสอบการแสดงข้อมูลที่เพิ่มลงใน Database ในหน้า (Web Browser) ของไฟล์ list.php ครับ

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