วิธีการเลื่อน Maintenance ของ RDS/ElastiCache ออกไป 1 อาทิตย์

มี Pending maintenance เข้ามา แต่ไม่มีเวลาพอสำหรับการ maintenance RDS / ElastiCache จะมีวิธีแก้ไขยังไง
2023.05.26

ปัญหาที่เกิดขึ้น

ผมอยากจะเลื่อนกำหนดการณ์ Maintenance ของ RDS ออกไปครับ

วันนี้ วันอังคารที่ 16-05-2023 ซึ่งมีกำหนดการณ์ Maintenance คือเดือนถัดไป วันศุกร์ที่ 16-06-2023 09:00 UST+7(เวลาประเทศไทย)

หลังจากตรวจสอบ RDS Console, AWS CLI แล้วพบว่ามี pending maintenance ที่จำเป็นต้องทำแสดงอยู่ครับ

Maintenance window ถูกตั้งค่าไว้ทุกวันพุธ 03:00 - 03:30(UST+7)

แต่เราต้องการดำเนินการ Maintenance ในวันอาทิตย์ที่ 28-05-2023 จะต้องทำอย่างไรบ้างครับ

วิธีแก้ปัญหา

ทำการเปลี่ยนกำหนดการณ์ของ Maintenance window ตามลำดับต่อไปนี้

  1. วันอังคารที่ 16-05-2023 ทำการเปลี่ยน Maintenance window เป็นทุกวันจันทร์ 03:00 - 03:30(UST+7)
  2. วันอาทิตย์ที่ 21-05-2023 ทำการเปลี่ยน Maintenance window เป็นทุกวันเสาร์ 03:00 - 03:30(UST+7)
  3. วันศุกร์ที่ 26-05-2023 ทำการกำหนด Maintenance window เป็นวันอาทิตย์ เพื่อให้เกิด Maintenance ในวันอาทิตย์ที่ 28-05-2023 ตามที่เรากำหนดไว้
  4. หากเราทำตามขั้นตอน「2.」หรือ「3.」แล้วยังมี pending maintenance อยู่ ให้ทำการกำหนด Maintenance เองแบบ Manual ในช่วงเวลาที่มีการเข้าถึงน้อยเพื่อลดผลกระทบที่จะส่งต่อกับ Service ให้น้อยที่สุด

โปรดพิจารณาโอกาสที่จะเกิดเหตุในข้อ 4 ด้วย เนื่องจากขั้นตอนเหล่านี้ไม่มีการการันตีว่าจะสามารถ Maintenance ใน Maintenance window ได้ 100%

เรียนรู้เกี่ยวกับ RDS / ElastiCache Maintenance

มี RDS / ElastiCache Maintenance ที่เลื่อนได้/ไม่ได้ แบ่งออกเป็น 2 ประเภทครับ

ไม่ว่าจะเป็นรูปแบบไหน ก็ไม่มีการการันตีว่าจะสามารถ Maintenance ตามวันและเวลาที่ระบุใน Maintenance window ได้ 100%

โดยพื้นฐานแล้ว Maintenance window จะเป็นการดำเนินการ แบบ Best Effort(พยายามเท่าที่จะทำได้) ครับ

การตรวจสอบว่า Maintenance สามารถเลื่อนออกไปได้หรือไม่ กรุณาดูจากอีเมลประกาศจาก AWS ครับ(หัวข้อ: A new Amazon ElastiCache service update is available [AWS Account: 123456789012] หรือ อื่นๆ)

หากตรวจสอบระยะเวลาแล้ว ให้ตรวจสอบหัวข้อต่อไปนี้ครับ

กรณีที่ไม่มีเวลาเพียงพอ, ไม่สามารถเลื่อนกำหนดการณ์ Maintenance ออกไปได้

ตัวอย่างสถานการณ์

ชื่อ เวลา
ปัจจุบัน 24-06-2023(วันเสาร์)
Maintenance window ทุกวันพุธ 03:00 - 03:30(UST+7)
ระยะเวลา 24-07-2023(วันเสาร์)09:00(UST+7)

ถ้าเป็นสถานการณ์แบบนี้ เมื่อถึงวันที่ 24-07-2023(วันเสาร์)09:00(UST+7)จะโดนบังคับ Maintenance ตามลำดับโดย AWS

หากต้องการเลี่ยงการบังคับ Maintenance (มีโอกาสที่จะทำให้ Service หยุดชั่วคราว) กรุณาทำตามขั้นตอนอย่างใดอย่างนึงต่อไปนี้

Pattern 1

  • ทำการ Maintenance แบบ Manual เอง ก่อนถึง Maintenance window ครั้งต่อไป (28-06-2023 วันพุธ 03:00 - 03:30 (UST+7))
    • ทำการดำเนินการ Maintenance ในช่วงเวลาที่มีการเข้าถึงน้อยเพื่อลดผลกระทบที่จะส่งต่อกับ Service ให้น้อยที่สุด

Pattern 2

  • เปลี่ยนวัน และ เวลาของ Maintenance window
    • เปลี่ยนเวลา Maintenance window โดยให้เลือกช่วงเวลาเป็นวันและเวลาจากปัจจุบันถึงวันเสาร์ 09:00(UST+7) (มีกรณีที่มีการเปลี่ยนการตั้งค่าของ Maintenance window ใช้เวลามากถึง 24 ชั่วโมง ทางเราจึงแนะนำให้เผื่อเวลาในการเปลี่ยนการตั้งค่าด้วยครับ
    • การปรับ Maintenance window เราสามารถกำหนดวันได้ทั้งก่อนวันพุธ(วันจันทร์, วันอังคาร) และหลังวันพุธ(วันพฤหัส, วันศุกร์, วันเสาร์ที่เป็นเวลาก่อนปัจจุบัน)
    • มีโอกาสที่การกำหนดของวันของ Maintenance window จะทำไม่ทัน ทำให้กว่าจะเปลี่ยนได้ก็เป็นวันอาทิตย์แล้ว (ซึ่งหมายความว่าเราอาจจะโดนบังคับ Maintenance ก่อน)
  • ให้เราทำการตรวจสอบว่า pending maintenance หายไปรึยังหลังจากเปลี่ยนวันที่กำหนด Maintenance window ใหม่แล้ว
    • หากยังมี pending maintenance อยู่ (Maintenance ยังไม่ถูกดำเนินการใน Maintenance window) เราแนะนำให้ทำการดำเนินการ Maintenance แบบ Manual ตาม Pattern 1

Pattern 3

  • ไม่เปลี่ยน Maintenance window รอ Maintenance window จัดการเองในวันพุธ 03:00 - 03:30
  • วันพฤหัส 29-06-2023 ตรวจสอบว่า pending maintenance หายไปรึยัง
    • หากยังมี pending maintenance อยู่ (Maintenance ยังไม่ถูกดำเนินการใน Maintenance window) เราแนะนำให้ทำการดำเนินการ Maintenance แบบ Manual ตาม Pattern 1

กรณีที่มีเวลาเพียงพอ และ สามารถเลื่อนกำหนดการณ์ Maintenance ออกไปได้

ตัวอย่างสถานการณ์

ชื่อ เวลา
ปัจจุบัน 24-06-2023(วันเสาร์)
Maintenance window ทุกวันพุธ 03:00 - 03:30(UST+7)
ระยะเวลา 24-07-2023(วันจันทร์)09:00(UST+7)

ในสถานการณ์นี้ เราสามารถเลื่อน Maintenance ได้ถึง 24-07-2023(วันจันทร์)09:00(UST+7)ครับ

ซึ่งตามที่กล่าวไว้ข้างต้นว่า การกระทำนี้เป็นแค่ Best Effort(พยายามเท่าที่จะทำได้) "ไม่มีการรับประกันว่าจะได้ Maintenance ได้ตามที่เรากำหนดไว้ 100%" หากอยากทำตามกำหนดการณ์ที่กำหนดได้ แนะนำให้ทำเองแบบ Manual ตาม Pattern 2 เลยครับ

Pattern 1

  • 24 ชั่วโมงก่อนถึง Maintanance Window ครั้งต่อไป (27-06-2023 อังคาร) ทำการกำหนดวันเวลา Maintenance Window ใหม่ แล้วพอจะถึง เวลา Maintenance Window ใหม่ ก็ทำการกำหนด Maintenance Window ใหม่อีกที(ถ้าตอนนี้ เป็นวันเสาร์ 18.00 ก็ให้เลือกเป็น วันเสาร์ 17.00 - 17.30 จะได้ช่วงเวลาที่นานที่สุด)

ตัวอย่างการตั้งกำหนดการณ์แบบมีเวลาเผื่อ(วิธีที่ยืดกำหนดการณ์ออกไปให้นานที่สุด)

  1. วันจันทร์ที่ 26-06-2023 เลื่อน Maintenance Window ให้เป็นทุกวันอาทิตย์ 03:00 - 03:30
  2. วันศุกร์ที่ 30-06-2023 เลื่อน Maintenance Window ให้เป็นทุกวันพฤหัส 03:00 - 03:30
  3. วันอังคารที่ 04-07-2023 เลื่อน Maintenance Window ให้เป็นทุกวันจันทร์ 03:00 - 03:30
  4. วันเสาร์ที่ 08-07-2023 เลื่อน Maintenance Window ให้เป็นทุกวันศุกร์ 03:00 - 03:30
  5. วันพุธที่ 12-07-2023 เลื่อน Maintenance Window ให้เป็นทุกวันอังคาร 03:00 - 03:30
  6. วันอาทิตย์ที่ 16-07-2023 เลื่อน Maintenance Window ให้เป็นทุกวันเสาร์ 03:00 - 03:30
  7. ในวันพฤหัสที่ 20-07-2023 ให้เลือก Maintenance Window เวลาที่เราต้องการก่อนถึงวันจันทร์ 09:00

Pattern 2

  • ทำการดำเนินการ Maintenance แบบ Manual เอง เมื่อเราไม่มีความจำเป็นต้องเลื่อนกำหนดการณ์ต่อจาก Pattern 1 หรือ ก่อนวันพุธ 24-06-2023 03:00 - 03:30(UST+7)
    • ทำการดำเนินการ Maintenance ในช่วงเวลาที่มีการเข้าถึงน้อยเพื่อลดผลกระทบที่จะส่งต่อกับ Service ให้น้อยที่สุด

Pattern 3

  • รอ Maintenance window เมื่อเราไม่มีความจำเป็นต้องเลื่อนกำหนดการณ์ต่อจาก Pattern 1 หรือ ก่อนวันเสาร์ 24-06-2023 03:00 - 03:30(UST+7)
    • วันพฤหัส 29-06-2023 ตรวจสอบว่า pending maintenance หายไปหรือไม่
    • หากยังมี pending maintenance อยู่ (Maintenance ยังไม่ถูกดำเนินการใน Maintenance window) แนะนำให้ทำการดำเนินการ Maintenance แบบ Manual ตาม Pattern 2

สรุป

Maintenance ของ AWS Service ไม่ได้มีการรองรับ 100% ว่าจะทำงานตามที่เรากำหนดไว้

ยกตัวอย่างเช่น ในระหว่างที่เราตั้งแผนการ Maintenance เกิดความขัดข้องกับฝั่ง Hardware ของ AWS ทำให้ Maintenance เสร็จไปเลยก็มีครับ

นอกจากนั้นในระหว่าง Maintenance Window หาก Resource มีการโหลดที่สูงจะไม่ได้รับการ Maintenance ก็มีครับ

หรือไม่ได้ทำอะไร แต่ pending maintenance ก็ไม่ถูกดำเนินการใน Maintenance Window ก็มีครับ

และด้วยความเป็นไปได้ที่จะเกิดเหตุการณ์เหล่านี้ เราแนะนำให้ท่านคิดแผนสำรองเผื่อไว้สำหรับการใช้งาน AWS ที่ปลอดภัยครับ

ก่อนหน้านี้ผมมีประสบการณ์ที่เคยอธิบายเกี่ยวกับเรื่องเหล่านี้หลายครั้ง โดยผมเองก็คิดว่า Maintenance นั้นเป็นเรื่องที่ยากเพราะไม่มีปัจจัยที่ไม่แน่นอนหลายอย่าง

ต้องอ่านเอกสาร หรือพึ่ง AWS support บ่อยๆ จึงเขียนบทความนี้ขึ้นมาเผื่อจะได้เป็นประโยชน์ต่อผู้ใช้งาน AWS บ้างครับ

บทความอ้างอิง

บทความต้นฉบับ

RDS / ElastiCache のメンテナンスウィンドウを 1 週間を超えて延期したいときの対処方法 | DevelopersIO (Japanese)