การรีเฟรชอินสแตนซ์และฮุกวงจรชีวิต
ทยอยนำเทมเพลตการเปิดใช้งานใหม่มาใช้ด้วยการรีเฟรชอินสแตนซ์ และใช้ฮุกวงจรชีวิตเพื่อเรียกใช้ตรรกะกำหนดเองก่อนเปิดใช้งานหรือยุติอินสแตนซ์
การรีเฟรชอินสแตนซ์และฮุกวงจรชีวิต เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาของการอัปเดตอินสแตนซ์แบบทยอย
เมื่อคุณอัปเดต Launch Template (AMI ใหม่ ข้อมูลผู้ใช้ใหม่ หรือประเภทอินสแตนซ์ใหม่) อินสแตนซ์ที่กำลังทำงานอยู่ใน ASG จะไม่ถูกแทนที่โดยอัตโนมัติ แต่ยังคงใช้การกำหนดค่าเดิมต่อไป หากต้องการเผยแพร่การเปลี่ยนแปลง คุณต้อง แทนที่อินสแตนซ์ การยุติและเปิดใช้อินสแตนซ์ใหม่ด้วยตนเองมีความเสี่ยงและอาจเกิดข้อผิดพลาดได้ง่าย Instance Refresh จะทำให้กระบวนการนี้เป็นอัตโนมัติ พร้อมการควบคุมความปลอดภัยที่กำหนดค่าได้
Instance Refresh: วิธีการทำงาน
Instance Refresh จะแทนที่อินสแตนซ์ของ ASG เป็นชุด ๆ แบบทยอย ในแต่ละขั้น ระบบจะยุติอินสแตนซ์เก่าหนึ่งชุด รอให้อินสแตนซ์ใหม่ผ่านการตรวจสอบสถานะ แล้วจึงดำเนินการต่อกับชุดถัดไป คุณควบคุมความเร็วได้ด้วย MinHealthyPercentage (เปอร์เซ็นต์ขั้นต่ำของความจุที่ต้องยังคงมีสถานะปกติระหว่างการรีเฟรช) และเวลา InstanceWarmup ซึ่งเป็นตัวเลือกเสริม
aws autoscaling start-instance-refresh \
--auto-scaling-group-name 'MyAppASG' \
--preferences '{
"MinHealthyPercentage": 80,
"InstanceWarmup": 300,
"CheckpointPercentages": [20, 50, 100],
"CheckpointDelay": 600
}'MinHealthyPercentage และขนาดชุด
MinHealthyPercentage กำหนดขีดต่ำสุดของความจุที่มีสถานะปกติระหว่างการรีเฟรช หากกำหนดเป็น 90% ระบบจะแทนที่ฟลีตครั้งละเพียง 10% ทำให้ช้าลงแต่ปลอดภัยกว่า ค่า 50% จะแทนที่ฟลีตครึ่งหนึ่งในครั้งเดียว ทำให้เร็วกว่าแต่มีความซ้ำซ้อนน้อยลง ASG จะคำนวณขนาดชุดโดยอัตโนมัติตามเปอร์เซ็นต์นี้และความจุเป้าหมายปัจจุบันของคุณ สำหรับเวิร์กโหลดในระบบจริง ควรเลือกเปอร์เซ็นต์ที่สูงกว่าเพื่อรักษาความพร้อมใช้งาน
จุดตรวจสอบสำหรับการทยอยเปิดตัวแบบคานารี
Checkpoints ช่วยให้คุณหยุด Instance Refresh ชั่วคราวที่จุดเปอร์เซ็นต์ที่กำหนดไว้ล่วงหน้าได้ ตัวอย่างเช่น คุณสามารถรีเฟรชอินสแตนซ์ 20% หยุดชั่วคราว 10 นาทีเพื่อเรียกใช้การทดสอบเบื้องต้น แล้วดำเนินการต่อ หากตรวจพบปัญหาที่จุดตรวจสอบใด ๆ คุณสามารถยกเลิกการรีเฟรชได้ โดย ASG จะหยุดการแทนที่อินสแตนซ์เพิ่มเติม แต่ปล่อยให้อินสแตนซ์ที่แทนที่ไปแล้วทำงานต่อ (อินสแตนซ์เหล่านั้นใช้เทมเพลตใหม่อยู่แล้ว) รูปแบบนี้ถือเป็นการนำไปใช้งานแบบคานารีสำหรับ EC2
การยกเลิกและการตรวจสอบ Instance Refresh
คุณสามารถ ยกเลิก Instance Refresh ที่กำลังดำเนินการได้ทุกเมื่อ การยกเลิกจะหยุดการแทนที่เพิ่มเติม แต่จะไม่ย้อนกลับรายการที่เสร็จสมบูรณ์แล้ว ใช้ describe-instance-refreshes เพื่อตรวจสอบสถานะ เปอร์เซ็นต์ความคืบหน้า และอินสแตนซ์ที่เปิดใช้งานไม่สำเร็จ ผสาน Instance Refresh เข้ากับไปป์ไลน์ CI/CD เพื่อเรียกใช้การรีเฟรชโดยอัตโนมัติหลังจากส่ง AMI ใหม่ไปยัง Launch Template ซึ่งจะทำให้เกิดการนำไปใช้งานแบบสีน้ำเงิน/สีเขียวที่ทำงานอัตโนมัติอย่างสมบูรณ์
aws autoscaling describe-instance-refreshes \
--auto-scaling-group-name 'MyAppASG'
# Cancel a running refresh
aws autoscaling cancel-instance-refresh \
--auto-scaling-group-name 'MyAppASG'แนะนำ Lifecycle Hooks
Lifecycle Hooks จะหยุดการเปลี่ยนสถานะของอินสแตนซ์ใน ASG ณ ช่วงเวลาสำคัญ เพื่อให้คุณเรียกใช้ตรรกะแบบกำหนดเองก่อนที่อินสแตนซ์จะเริ่มทำงานหรือก่อนถูกยุติ มีจุดของฮุกสองจุด ได้แก่ EC2_INSTANCE_LAUNCHING (หลังการเปิดใช้งานและก่อนนำอินสแตนซ์เข้าสู่ InService) และ EC2_INSTANCE_TERMINATING (หลังการตัดสินใจยุติและก่อนยุติอินสแตนซ์จริง) ระหว่างที่ฮุกทำงาน อินสแตนซ์จะอยู่ในสถานะ Pending:Wait หรือ Terminating:Wait
กรณีการใช้งาน Lifecycle Hooks ขณะเปิดใช้งาน
ฮุกขณะเปิดใช้งานเหมาะอย่างยิ่งสำหรับงานที่ต้องเสร็จสิ้นก่อนที่อินสแตนซ์จะให้บริการทราฟฟิก เช่น การติดตั้งซอฟต์แวร์เพิ่มเติม การดึงการกำหนดค่าจาก Parameter Store การลงทะเบียนกับรีจิสทรีค้นหาบริการ หรือการเรียกใช้การทดสอบการผสานรวม ASG จะยังไม่เพิ่มอินสแตนซ์ไปยังกลุ่มเป้าหมายของตัวกระจายโหลดจนกว่าฮุกจะเสร็จสิ้น (หรือหมดเวลา) วิธีนี้จะป้องกันไม่ให้ทราฟฟิกเข้าถึงอินสแตนซ์ที่กำหนดค่าไม่เสร็จสมบูรณ์
aws autoscaling put-lifecycle-hook \
--auto-scaling-group-name 'MyAppASG' \
--lifecycle-hook-name 'AppInit' \
--lifecycle-transition EC2_INSTANCE_LAUNCHING \
--default-result ABANDON \
--heartbeat-timeout 300กรณีการใช้งาน Lifecycle Hooks ขณะยุติ
ฮุกขณะยุติจะทำงานก่อนที่อินสแตนซ์จะถูกยุติจริง กรณีการใช้งาน ได้แก่ การระบายคำขอที่กำลังดำเนินการจากคิวระดับแอปพลิเคชัน การเขียนข้อมูลที่แคชไว้ลงในที่จัดเก็บถาวร การยกเลิกการลงทะเบียนจากรีจิสทรีบริการ หรือการคัดลอกไฟล์บันทึกไปยัง S3 หากไม่มีฮุกขณะยุติ งานที่กำลังดำเนินการบนอินสแตนซ์ที่กำลังยุติอาจสูญหายได้ ฮุกจะให้เวลาคุณสูงสุด 2 ชั่วโมง (หมดเวลาสัญญาณชีพ) เพื่อดำเนินงานปิดระบบอย่างราบรื่นให้เสร็จสิ้น
aws autoscaling put-lifecycle-hook \
--auto-scaling-group-name 'MyAppASG' \
--lifecycle-hook-name 'GracefulShutdown' \
--lifecycle-transition EC2_INSTANCE_TERMINATING \
--default-result CONTINUE \
--heartbeat-timeout 120การทำ Lifecycle Hook ให้เสร็จสมบูรณ์
ตรรกะแบบกำหนดเองที่ทำงานบนอินสแตนซ์หรือถูกเรียกใช้โดยอินสแตนซ์ต้องส่งสัญญาณให้ฮุกเมื่อทำงานเสร็จ ใช้ complete-lifecycle-action ร่วมกับ CONTINUE (ดำเนินการตามปกติ) หรือ ABANDON (สำหรับฮุกขณะเปิดใช้งาน ให้ยุติอินสแตนซ์ ส่วนฮุกขณะยุติ ให้ละเว้นและดำเนินการต่อ) คุณยังสามารถขยายเวลาหมดอายุของฮุกได้โดยส่ง สัญญาณชีพทุกช่วงเวลาจนถึงระยะเวลาสูงสุด หากฮุกหมดเวลา ระบบจะใช้ DefaultResult
# From inside the instance or a Lambda triggered by EventBridge
aws autoscaling complete-lifecycle-action \
--auto-scaling-group-name 'MyAppASG' \
--lifecycle-hook-name 'AppInit' \
--lifecycle-action-result CONTINUE \
--instance-id 'i-0abc123def456'การเรียกใช้ตรรกะด้วย EventBridge
วิธีที่สะอาดที่สุดในการตอบสนองต่อ Lifecycle Hooks คือใช้ Amazon EventBridge เมื่อ Lifecycle Hook ทำงาน ASG จะส่งเหตุการณ์ไปยัง EventBridge กฎของ EventBridge จะส่งต่อเหตุการณ์นี้ไปยัง ฟังก์ชัน Lambda ซึ่งดำเนินงานที่จำเป็นแล้วเรียกใช้ complete-lifecycle-action สถาปัตยกรรมนี้ไม่ต้องใช้เซิร์ฟเวอร์โดยสมบูรณ์ ไม่ต้องคอยตรวจสอบซ้ำ และปรับขนาดได้โดยอัตโนมัติ การแจ้งเตือนผ่าน SQS และ SNS เป็นทางเลือกแบบเก่ากว่า แต่ EventBridge เป็นตัวเลือกที่แนะนำสำหรับการออกแบบใหม่
Instance Refresh ทำงานร่วมกับ Lifecycle Hooks
เมื่อ Instance Refresh แทนที่อินสแตนซ์ ทั้งสอง Lifecycle Hooks จะยังคงทำงาน ได้แก่ ฮุกขณะยุติบนอินสแตนซ์เก่า และฮุกขณะเปิดใช้งานบนอินสแตนซ์ใหม่ ซึ่งหมายความว่าตรรกะการปิดระบบอย่างราบรื่นและการเริ่มต้นระบบของคุณจะทำงานโดยอัตโนมัติระหว่างการอัปเดตแบบทยอย ไม่ใช่เฉพาะในระหว่างเหตุการณ์การปรับขนาดตามปกติเท่านั้น ควรทดสอบตรรกะ Lifecycle Hook ระหว่าง Instance Refresh แบบเป็นระยะก่อนนำไปใช้ในระบบจริงเสมอ เพื่อตรวจสอบว่าการทำงานถูกต้อง
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า Instance Refresh แทนที่อินสแตนซ์ของ ASG เป็นชุด ๆ แบบทยอย โดยควบคุมด้วย MinHealthyPercentage และจุดตรวจสอบที่เป็นตัวเลือกเสริมสำหรับการตรวจสอบแบบคานารี Lifecycle Hooks หยุดการเปลี่ยนสถานะของอินสแตนซ์ขณะเปิดใช้งานหรือยุติ เพื่อเรียกใช้ตรรกะการเริ่มต้นระบบแบบกำหนดเองหรือการปิดระบบอย่างราบรื่น และ EventBridge + Lambda เป็นรูปแบบที่แนะนำสำหรับการตอบสนองต่อเหตุการณ์ของ Lifecycle Hook โดยไม่ต้องคอยตรวจสอบซ้ำ ต่อไปเราจะศึกษา ฟังก์ชัน AWS Lambda รันไทม์ ตัวเรียกใช้ และตัวจัดการ
คำถามที่พบบ่อย
บทเรียน “การรีเฟรชอินสแตนซ์และฮุกวงจรชีวิต” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การรีเฟรชอินสแตนซ์และฮุกวงจรชีวิต” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การรีเฟรชอินสแตนซ์และฮุกวงจรชีวิต”
ทยอยนำเทมเพลตการเปิดใช้งานใหม่มาใช้ด้วยการรีเฟรชอินสแตนซ์ และใช้ฮุกวงจรชีวิตเพื่อเรียกใช้ตรรกะกำหนดเองก่อนเปิดใช้งานหรือยุติอินสแตนซ์ คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การรีเฟรชอินสแตนซ์และฮุกวงจรชีวิต” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม
ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เทมเพลตการเปิดใช้งานและการกำหนดค่า ASG
- นโยบายการปรับขนาด: การติดตามเป้าหมายและการปรับขนาดเป็นขั้น
- การปรับขนาดตามกำหนดเวลาและการปรับขนาดเชิงคาดการณ์
- การรีเฟรชอินสแตนซ์และฮุกวงจรชีวิต