วิธีการ Deploy Application โดยไม่ต้องหยุดการให้บริการใน Elastic Beanstalk

Elastic Beanstalk สามารถ Deploy Application โดยไม่ต้องหยุดการให้บริการได้ ซึ่งจะมีฟังก์ชัน Rolling Update เป็นวิธีการที่ใช้งานง่าย บทความนี้ผมก็จะมาอธิบายวิธีการ Deploy Application โดยไม่ต้องหยุดการให้บริการโดยใช้ Rolling Update ครับ

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

ครั้งนี้ผมจะมาแนะนำ วิธีการ 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

การตั้งค่าอัปโหลดในหัวข้อ 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 ของเรา เว็บไซต์ก็ยังสามารถใช้งานต่อได้นั่นเองครับ

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