【ข่าวด่วน】AWS RDS สามารถ Blue/Green Deploy โดยไม่สูญเสียข้อมูลได้แล้ว

อัพเดทสุดน่าสนใจ ไม่น่าเชื่อว่า RDS Aurora จะสามารถใช้ Blue/Green Deploy ได้แล้ว รายละเอียดจะเป็นอย่างไรรับชมได้ในบทความนี้ นี่เป็นบทความแปลที่มีเนื้อหาดัดแปลงมาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「【衝撃】AWSのRDSがデータを失わないBlue/Greenデプロイに対応しました #reinvent」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอัพเดทเนื้อหาบางอย่างเพื่อให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
2022.12.02

หากท่านผู้อ่านต้องการทำความเข้าใจเกี่ยวกับ Blue/Green เพิ่มเติมสามารถอ่านได้ที่บทความในลิ้งค์นี้ครับ Blue/Green(เพิ่มเติม)

"เดี๋ยวนี้ Database ก็สามารถ Blue/Green Deploy ได้แล้วนะ"

"ก็ทำได้อยู่แล้วปะ แค่ Blue/Green Deploy...... เอ๊ะ? DB? มันจะเป็นไปได้ไง??????"

นี่เป็นความรู้สึกผมครั้งแรกเมื่อได้เห็นหัวข้ออัพเดทนี้ครับ

Blue/Green Deploy จำเป็นต้องเป็น Deploy ที่ปลอดภัยข้อมูลต้องไม่สูญหายครับ โดยหลักการคือสร้างตัวก๊อบปี้ใหม่โดยที่ในขณะเดียวกันก็ไม่ตัด Traffic จากตัวปัจจุบันที่ใช้อยู่ เมื่อตรวจสอบว่าตัวใหม่ที่สร้างใช้งานได้แล้วจึงทำการ Release เปลี่ยนจากตัวเก่ามาเป็นตัวใหม่ครับ

โดยความยุ่งยากของปัญหาก็คือ database จำเป็นต้องอัพเดทตลอดเวลาทำให้การที่สร้างตัวก็อปปี้ออกมาให้ sync เหมือนเป้ะๆเป็นเรื่องที่เป็นได้ยากครับ
ซึ่งเมื่อเกิดปัญหาแบบนี้เรามักจะใช้ตัว Stateless application หรือ Stateless server ของ AWS ในการแก้ไขปัญหา
แต่ตอนนี้ AWS ก็ได้พัฒนา technology ขึ้นมาแก้ไขปัญหาจนสามารถใช้กับ RDS ที่เป็น Database ได้
การจะทำ Blue/Green Deploy กับ Database นั้นค่อนข้างมีข้อจำกัดอยู่ในปัจจุบัน ซึ่งหากต้องการอยากจะใช้แนะนำให้ตรวจสอบ Workload ของเราก่อนว่าตรงกับเงื่อนไขรึเปล่าครับ

โดยในบทความนี้ เป็นเพียงการนำเสนอภาพรวมที่มีข้อมูลออกมาจาก Official เท่านั้น ไม่ได้มีการตรวจสอบการใช้งานจริงครับ

มี Release ใหม่ของ RDS มาแล้ว!!
  ( ゚д゚)
  /   ヾ
__L| / ̄ ̄ ̄/_
  \/   /

สรุปข้อมูลอัพเดท

มีเขียนเป็นบทความใน What's New อยู่ครับ

แปลคร่าวๆ

ตอนนี้ Amazon Relational Database Service (Amazon RDS) ได้รองรับ Amazon RDS Blue/Green Deployments เพื่อช่วยคุณในการอัพเดท Amazon Aurora และ Amazon RDS databases ของคุณให้ปลอดภัยขึ้น ให้ง่ายขึ้น และ ให้เร็วขึ้น โดย Blue/Green Deployments จะสร้าง fully managed staging environment ที่อนุญาตให้คุณ deploy และ test production changes, ที่ไม่ทำให้ production database ของคุณเสียหาย
ด้วยคลิกๆเดียว คุณสามารถเปลี่ยน staging environment ให้กลายเป็น production system ใหม่ได้ในไม่กี่นาทีโดยไม่สูญเสียข้อมูลใน application ของคุณ

คุณสามารถอัพเดท Database ของคุณผ่านการใช้งาน Amazon RDS Blue/Green Deployments ใน Amazon RDS Console ได้ในไม่กี่คลิก

เป็นการอัพเดทข้อมูลโดยไม่มี Data loss ซึ่งน่าจะหมายถึงสามารถ sync กันได้ระหว่างตัวใหม่และเก่า ถือว่าเป็นอะไรที่ดูน่าสนใจมากครับ

Region กับ Engine Version ที่รองรับ

ตอนนี้ Version ที่รองรับจะเป็น MySQL Base ส่วน PostgreSQL ยังไม่รองรับครับ โดยตอนนี้ทุก Region ยกเว้น China สามารถใช้งานได้แล้วครับ

  • Engine Version ที่รองรับ
    • Amazon Aurora with MySQL compatibility 5.6 ขึ้นไป
    • Amazon RDS for MySQL 5.7 ขึ้นไป
    • Amazon RDS for MariaDB 10.2 ขึ้นไป
  • Region ที่รองรับ
    • ทุก Region ยกเว้น China กับ AWS GovCloud(USA Region)

ภาพรวมการทำงาน Blue/Green Deploy ของ RDS

สามารถตรวจสอบได้ใน AWS Official Document ด้านล่างนี้

รวมข้อมูลเจ๋งๆของ Blue/Green Deploy

นี่จะเป็นการอัพเดท Database ในรูปแบบที่ปลอดภัยได้มากที่สุด และ ป้องกันการเกิด error ได้อีกด้วย เป็นคอนเซปที่ใช้เทคโนโลยี Blue/Green Deploy ที่มีอยู่แล้วมาประยุคกับ Database ถือว่าดีมากๆครับ

  • สามารถสร้าง Full managed staging environment ตัวก๊อปปี้ mirror แบบเป้ะๆ ได้ในไม่กี่ step
  • ใน staging environment จะสร้าง CLone Primary Database ของ production environment กับ Read Replica ที่อยู่ใน Region นั้นๆ
  • Blue/Green Deploy จะใช้ logical replication ในการ sync ระหว่าง 2 environment
  • การ staging เปลี่ยน environment นั้นใช้เวลาเพียง 1 นาที
  • ในช่วงเวลาที่เปลี่ยน ทั้ง Blue environment และ Green environment จะ Block การ เขียนข้อมูล เพื่อป้องกันข้อมูลเสียหาย
  • เมื่อเลื่อนขั้น หรือเปลี่ยน environment เสร็จแล้ว จะทำการเปลี่ยนเส้นทางการส่งข้อมูลไปที่ตัวที่ถูกเปลี่ยนเป็น production environment (ตัวใหม่)
  • สามารถใช้ได้กับหลายสถานการณ์
    • Engine Upgrade
    • (สำคัญ) เปลี่ยน schema
    • OS หรือ Maintenance Update

มีการ sync ทั้งการเปลี่ยน schema และ Replication

Blue/Green Deploy สำหรับ Database Official Document

สำหรับข้อมูล Blue/Green Deploy สำหรับ Database Official Document สามารถตรวจสอบลิ้งค์ด้านล่างนี้

แผนผังภาพรวมการทำงานจริงๆอยู่ที่ด้านล่างนี้ครับ แนะนำให้ตรวจสอบเพื่อความเข้าใจครับ (อ้างอิงจาก Overview of Amazon RDS Blue/Green Deployments - Amazon Relational Database Service)

สิ่งที่ต้องพิจารณาในการใช้ Blue/Green Deploy

Overview of Amazon RDS Blue/Green Deployments - Amazon Relational Database Service

ใน Official Document ได้เขียนเกี่ยวกับสิ่งที่ต้องพิจารณาในการใช้ Blue/Green Deploy ไว้ครับ โดยสรุปหัวข้อใหญ่ๆออกมาได้ประมาณนี้ครับ

  • Blue/Green Deploy จะแบ่งแยก Resource จาก ID เฉพาะที่ติดกับ Resource
  • หลังจาก Green Resource กลายเป็น Resource ที่ในงานจริงจากการ Blue/Green Deploy แล้ว Resource ID จะถูกเปลี่ยน

นั่นทำให้หากโครงสร้าง environment ของเรามีความจำเป็นต้องใช้ Resource ID เดิม จำเป็นต้องมีการ maintenance ครับ
เข่น

  • ในกรณีที่ RDS API ใช้ Resource ID ในการ filtering
  • ในกรณีที่ใช้ CloudTrail ในการติดตาม Resource โดยยึดจาก Resource ID
  • ในกรณีที่ใช้ Resource ID ใน IAM Policy
  • ในกรณีที่ใช้ Resource ID ใน AWS Backup

ผลกระทบจากการที่ Resource ID เปลี่ยน ถือว่าไม่ใช่เรื่องเล่นๆครับ ในกรณีที่ IAM Policy กำหนดใช้ Resource ID แล้ว ถ้า Resource ID เปลี่ยน ก็จะทำให้ทำงานได้ไม่เหมือนเดิม เพราะฉนั้นโปรดศึกษาให้ดีก่อนทำงานจริงครับ

ข้อจำกัดของ Blue/Green Deploy

หากเราใช้ Service จะทำให้เราไม่สามารถใช้ Blue/Green Deploy ได้ครับ

Overview of Amazon RDS Blue/Green Deployments - Amazon Relational Database Service

  • Amazon RDS Proxy
  • Cascading read replicas
  • Cross-Region read replicas
  • Multi-AZ DB clusters
  • AWS CloudFormation

โดยส่วนตัวผมคิดว่าการไม่รองรับ AWS CloudFormation น่าจะทำให้ Database หลายๆตัวทำ Blue/Green Deploy ไม่ได้กันเยอะครับ ซึ่งผมคิดว่าสาเหตุน่าจะมาจากการที่ AWS CloudFormation มีการกำหนดรูปแบบของ Resource ไว้ใน Static code ทำให้เปลี่ยนจากรูปแบบที่กำหนดไว้ไม่ได้แล้วนั่นเองครับ

ถึงยังงั้น Blue/Green Deploy ก็ยังเป็นฟังก์ชันที่น่าสนใจสำหรับ Database อยู่ดี

จากเนื้อหาในการอัพเดทครั้งนี้ เราได้สอบถามคุณ Guri ที่ดูแลเกี่ยวกับ Database ของบริษัทเรา ได้ความเห็นมาดังนี้ครับ

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

ซึ่งนั่นหมายความว่าไม่ได้ใช้เทคโนโลยีใหม่ แต่เป็นการปรับให้การดูแลจัดการนั้นง่ายขึ้น และอัพเดทได้เร็วขึ้นได้โดยใช้ Blue/Green Deploy นั่นเองครับ

ในบทความนี้เราได้รวบรวมข้อมูลจาก AWS Document มาสรุปให้ทุกคนได้ฟังกันสดๆร้อน จนขนาดคนเขียนบทความก็ยังไม่ได้ลองจริง แต่เพราะเป็นเรื่องที่น่าสนใจเลยอยากรีบมาเล่าให้ทุกท่านได้อ่านกัน

หากใครที่ใช้ RDS หรือ Aurora อยู่เป็นประจำ ก็แนะนำให้ลองตรวจสอบ environment ก่อนก็น่าจะดีครับ

แล้วเจอกันในบทความต่อไป สวัสดีครับ ต้า ครับ

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

【衝撃】AWSのRDSがデータを失わないBlue/Greenデプロイに対応しました #reinvent | DevelopersIO

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