วิธีการ Deploy Application โดยไม่ต้องหยุดการให้บริการใน Elastic Beanstalk
ครั้งนี้ผมจะมาแนะนำ วิธีการ Deploy Application โดยไม่ต้องหยุดการให้บริการใน Elastic Beanstalk
แนะนำให้ศึกษาบทความลิงก์ด้านล่างนี้ก่อนเริ่มทำขั้นตอนในบทความนี้ เพราะมีการอธิบายเกี่ยวกับ Rolling Update คืออะไร และวิธีการ Deployment โดยสามารถใช้งานเว็บไซต์ได้อย่างต่อเนื่องครับ
เมื่อศึกษาบทความด้านบนนี้เสร็จแล้ว เริ่มทำการ Rolling Update ได้เลยครับ
สิ่งที่ต้องมี
※มีการสร้าง Application, Environment ใน Elastic Beanstalk (สำหรับผู้ใช้งานที่มีอยู่แล้วข้ามขั้นตอนนี้ไปได้เลยครับ)
※ถ้าเป็น Laravel แนะนำให้สร้าง Environment ตามลิงก์บทความนี้ครับ (สำหรับผู้ใช้งานที่มีอยู่แล้วข้ามขั้นตอนนี้ไปได้เลยครับ)
หมายเหตุ: ถ้ามีขั้นตอนที่ซ้ำกันให้ข้ามไปได้เลยครับ
ตัวอย่างในบทความนี้ สมมติว่าผมสร้าง Application โดยใช้ชื่อดังนี้
Application:tinnakorn
การสร้าง Environment โดยใช้ ELB (ALB)
ก่อนอื่นผมจะสร้าง Environment โดยตั้งค่าการใช้งาน ELB (ALB)
ตัวอย่างในบทความนี้ ผมจะสร้าง Environment โดยใช้ชื่อดังนี้
Environment:tinnakorn-rollingupdate
ถ้าเรามี Application และ Environment อยู่แล้ว ให้ทำการสร้าง Environment ขึ้นมาใหม่โดยดูวิธีการ Copy Environment ตามลิงก์บทความนี้ (สำหรับผู้ใช้งานที่รู้วิธีการสร้าง Environment อยู่แล้วข้ามไปที่ขั้นตอนการตั้งค่า Configure more options ได้เลยครับ)
ตัวอย่างการสร้าง Environment
※Environment information
Environment name:tinnakorn-rollingupdate
(ชื่ออะไรก็ได้)
Domain:tinnakorn-rollingupdate
(ชื่ออะไรก็ได้)※Platform
Platform:PHP
※Application code
เลือกวิธีอัปโหลดไฟล์ตามที่คุณต้องการ
ต่อไปคือการตั้งค่าในConfigure more options
โดยทำตามหัวข้อดังต่อไปนี้
※หัวข้อ Capacity
คลิกปุ่มEdit
ที่หัวข้อ Capacity แล้วตั้งค่าดังนี้:
» Environment type:Load balanced
» Instances: Min2
, Max2
(ครั้งนี้ เราจะทำการล็อกจำนวน Instance อยู่ที่ 2 ตัว)
เลื่อนลงมาด้านล่างสุดที่หัวข้อ Scaling triggers แล้วตั้งค่าดังนี้:
» Lower threshold:0
(หากไม่ตั้งค่านี้เป็น 0 ก็จะเกิด Error Message)
» คลิกปุ่มSave
※หัวข้อ Load balancer
คลิกปุ่มEdit
ที่หัวข้อ Load balancer แล้วตั้งค่าดังนี้:
Load balancer type
» Load balancer type: ◉ Application Load Balancer
เมื่อตั้งค่าในหัวข้อ Load balancer เสร็จแล้ว ให้เลื่อนลงมาด้านล่างสุดและคลิกSave
จากนั้นให้ตั้งค่าในหัวข้อถัดไป
การตั้งค่า Rolling updates and deployments
※หัวข้อ Rolling updates and deployments
» Deployment policy:Rolling
» Batch size: Fixed1
» เลื่อนลงมาด้านล่างสุด คลิกปุ่มSave
เมื่อตั้งค่าตามขั้นตอนด้านบนทุกอย่างเสร็จแล้ว ให้เลื่อนลงมาด้านล่างสุดและคลิกปุ่มCreate environment
จากนั้นรอระบบเริ่มต้นสักครู่ครับ
เมื่อเริ่มต้นระบบเสร็จแล้วจะได้ 2 Instance ตามรูปภาพ
ตรวจสอบเว็บไซต์
เมื่อเริ่มต้นระบบเสร็จแล้ว คลิกลิงก์จากหน้า Environment เพื่อเปิดหน้าเว็บไซต์โปรเจกต์ของเราขึ้นมา ตัวอย่างนี้คือ
tinnakorn-rollingupdate.ap-southeast-1.elasticbeanstalk.com/customer
หน้าเว็บไซต์นี้เป็นแค่ตัวอย่างการสาธิตในบทความนี้เท่านั้น
แก้ไขข้อมูลในโปรเจกต์
ขั้นตอนนี้ผมจะแก้ไขข้อความจากname
ให้เป็นName
เพื่อทำการทดสอบการใช้งาน Rolling updates and deployments ในขั้นตอนถัดไปครับ
เมื่อแก้ไขข้อความเสร็จแล้วให้สร้างไฟล์ ZIP เตรียมไว้ เช่น20220806_2249.zip
และ Deploy โดยการ Upload โปรเจกต์ที่แก้ไขนี้ไปยัง Environment ของเราอีกครั้งในขั้นตอนถัดไปครับ
Upload Application Version
ขั้นตอนนี้ผมจะทำการ Deploy project version ใหม่โดยใช้ไฟล์20220806_2249.zip
ไปยัง Environment ของผม และแสดงข้อมูลที่แก้ไขจากหน้า Web Browser ครับ
มาที่เมนูด้านซ้ายตรงชื่อ Application ของเรา เช่น▼ tinnakorn
และเลือกApplication versions
การตั้งค่าอัปโหลดในหัวข้อ Upload Application Version:
» Version label:20220806_2249
(แนะนำให้ใส่ชื่อเดียวกับไฟล์.zip
ที่จะ Deploy)
» คลิกปุ่มChoose file
และเลือกไฟล์ ZIP จากที่เก็บไฟล์ของคุณ
เมื่ออัปโหลดเสร็จแล้วจะแสดงเป็น [ File name: 20220806_2249.zip ✅ ] แบบนี้
จากนั้นให้คลิกUpload
ได้เลยครับ
ติ๊กที่✅ 20220806_2249.zip
และคลิกActions ▼
ตามด้วยเลือกDeploy
เลือกEnvironment
ของเรา และคลิกDeploy
ได้เลย
จากนั้นรอระบบ Deploy version ใหม่สักครู่ครับ
ทดสอบ Reload หน้าเว็บไซต์
เมื่อระบบ Deploy version ใหม่เสร็จแล้ว ผมจะ Reload หน้าเว็บไซต์โปรเจกต์อีกครั้ง
จะเห็นว่าข้อความเป็นName
ตามที่แก้ไขเรียบร้อยครับ
ตรวจสอบ Event
ขั้นตอนนี้ผมจะอธิบายเกี่ยวกับ Event ที่ได้มีการดำเนินการไปครับ
เข้ามาที่ Service Elastic Beanstalk แล้วเลือกEvents
ใน Environment ของเรา แล้วดูที่ Event ด้านขวา
เมื่อเสร็จสิ้นการดำเนินการ Deploy บน EC2 ครั้งที่ 1 ใน Batch 1 แล้ว ก็จะมาดำเนินการ Deploy บน EC2 ครั้งที่ 2 ใน Batch 2 เพราะว่า ELB ไม่ได้จัดสรรการเข้าถึง EC2 ในระหว่าง Deploy ซึ่งต่อให้อยู่ในระหว่าง Deploy บริการก็จะไม่หยุดนั่นเอง
และถ้าเห็นข้อความ 「Environment update completed successfully.」 แสดงขึ้นมาแล้ว ก็หมายความว่าการ Deploy version ใหม่เสร็จสมบูรณ์ครับ
สรุป
การสาธิตนี้ผมได้เน้นไปที่การตั้งค่า
Rolling updates and deployments
เนื่องจากเห็นว่าฟังก์ชันนี้มีประโยชน์ในการช่วยให้เว็บไซต์ของเราสามารถใช้งานได้อย่างต่อเนื่อง ต่อให้ทำการ Deploy project version ใหม่เข้าไปยัง Environment ของเรา เว็บไซต์ก็ยังสามารถใช้งานต่อได้นั่นเองครับ