InterCloud

คู่มือ · Cloud

คู่มือการย้ายระบบขึ้น Cloud สำหรับองค์กร ตั้งแต่การประเมินจนถึงการเปลี่ยนระบบ

การย้ายระบบคือลำดับของการตัดสินใจ ซึ่งส่วนใหญ่เกิดขึ้นก่อนที่จะย้ายเซิร์ฟเวอร์ใด ๆ คู่มือนี้อธิบายขั้นตอนต่าง ๆ การเลือกภูมิภาคและถิ่นที่อยู่ของข้อมูล และแนวปฏิบัติที่ทำให้สุดสัปดาห์ของการสลับระบบผ่านไปอย่างราบรื่น

วัตถุประสงค์ของคู่มือ

องค์กรแทบไม่เคยย้ายระบบเพียงครั้งเดียว แต่จะย้ายระบบแรก เรียนรู้จากระบบนั้น แล้วจึงย้ายอีกสิบระบบถัดไป คู่มือนี้รวบรวมสิ่งที่ได้เรียนรู้ เพื่อให้ระลอกที่สองเร็วและปลอดภัยกว่าระลอกแรก ได้แก่ วิธีประเมินระบบ รูปแบบของ Landing Zone วิธีดำเนินการสลับระบบ และความหมายของคำว่า “เสร็จสมบูรณ์” คู่มือนี้คือฉบับที่เราใช้เป็นจุดเริ่มต้นกับลูกค้า และควรปรับให้เหมาะกับองค์กรของคุณ มากกว่าทำตามทุกตัวอักษร

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

ขั้นตอนต่าง ๆ

แต่ละขั้นตอนจบลงด้วยการตัดสินใจที่คณะกรรมการกำกับโครงการเข้าใจได้ ขั้นตอนต่าง ๆ ซ้อนทับกันระหว่างระลอก กล่าวคือ ระลอกที่สองจะถูกประเมินขณะที่ระลอกแรกกำลังย้าย

  1. 1

    ประเมิน

    จัดทำบัญชีรายการแอปพลิเคชันทั้งหมด พร้อมเจ้าของ ระบบที่พึ่งพา การจัดชั้นความลับของข้อมูล การเชื่อมต่อ สิทธิ์การใช้งานซอฟต์แวร์ และโครงสร้างพื้นฐานปัจจุบัน จัดกลุ่มแอปพลิเคชันเป็นระลอกตามการพึ่งพาและความเสี่ยง แล้วกำหนดแนวทางสำหรับแต่ละระบบ ได้แก่ Rehost (ย้ายตามสภาพเดิม) Replatform (ปรับเล็กน้อย เช่น ใช้ฐานข้อมูลแบบ Managed) Refactor (ทำเป็น Container หรือออกแบบสถาปัตยกรรมใหม่) Replace (เปลี่ยนไปใช้ SaaS) หรือ Retire (ยกเลิก) ผลลัพธ์: แผนระลอกพร้อมแนวทางของแต่ละระบบ และกรณีทางธุรกิจฉบับแรก

  2. 2

    วางแผน

    สำหรับระลอกแรก ให้ออกแบบสถาปัตยกรรมเป้าหมาย เส้นทางเครือข่ายจากสถานที่ขององค์กร การจัดการตัวตน (SSO สำหรับบุคคล และ Role สำหรับ Workload) วิธีการย้ายข้อมูล และรูปแบบการสลับระบบของแต่ละแอปพลิเคชัน เขียนเกณฑ์การตรวจรับในขั้นตอนนี้ ได้แก่ การทดสอบใด ผู้ใช้กลุ่มใด และรายงานใดที่ต้องตรงกัน ผลลัพธ์: แบบออกแบบของแต่ละแอปพลิเคชันและโครงร่างคู่มือปฏิบัติงาน (Runbook)

  3. 3

    สร้าง Landing Zone

    สร้างโครงสร้างบัญชี เครือข่าย การจัดการตัวตน การบันทึก Log มาตรฐานความปลอดภัยขั้นต่ำ การสำรองข้อมูล และการควบคุมต้นทุน ในรูปแบบโค้ด ก่อนที่ Workload ใดจะเข้ามา นี่คือรากฐานที่ทุกระลอกถัดไปต้องอาศัย จึงคุ้มค่าที่จะสร้างให้ถูกต้องเพียงครั้งเดียว ผลลัพธ์: สภาพแวดล้อมที่จัดการด้วย Terraform และผ่านการตรวจสอบการปฏิบัติตามข้อกำหนดของตนเอง

  4. 4

    ย้ายเป็นระลอก

    ย้ายสภาพแวดล้อมที่ไม่ใช่ Production ก่อน แล้วจึงย้าย Production ทีละระลอก ทำสำเนาข้อมูลอย่างต่อเนื่องในกรณีที่รูปแบบการย้ายต้องใช้ ทดสอบการตรวจรับในระบบเป้าหมายด้วยข้อมูลจริง และแก้ไขสิ่งที่ผิดพลาดก่อนที่จะกระทบผู้อื่น ผลลัพธ์: สภาพแวดล้อมเป้าหมายที่ผ่านการตรวจรับแล้ว ขณะที่ระบบเดิมยังทำงานอยู่

  5. 5

    สลับระบบ

    ดำเนินการตามคู่มือปฏิบัติงานที่ซักซ้อมไว้: หยุดการเปลี่ยนแปลง ซิงโครไนซ์ข้อมูลครั้งสุดท้าย สลับการรับส่งข้อมูล ตรวจสอบ และประกาศ คงสภาพแวดล้อมต้นทางไว้โดยไม่แตะต้องและพร้อมสำหรับการย้อนกลับตามระยะเวลาที่ตกลงกัน ผลลัพธ์: Production ทำงานบนระบบเป้าหมาย โดยผ่านจุดตัดสินใจเรื่องการย้อนกลับอย่างชัดเจนแล้ว

  6. 6

    ปรับให้เหมาะสม

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

การเลือกภูมิภาคและถิ่นที่อยู่ของข้อมูล

การเลือกภูมิภาคต้องมาก่อน ภูมิภาคที่ตั้งอยู่ในประเทศ (หากมี) มี Availability Zone หลายแห่งเพื่อความทนทาน และมีความหน่วงต่ำสำหรับผู้ใช้ในประเทศ AWS Asia Pacific (Bangkok) Region (ap-southeast-7) เป็นตัวอย่างหนึ่ง ซึ่งเปิดทางเลือกให้องค์กรที่มีผู้ใช้ในประเทศไทย จากเดิมที่ตลอดยุค Cloud ส่วนใหญ่ต้องให้บริการผ่านสิงคโปร์ สำหรับระบบที่ไวต่อความหน่วง และองค์กรที่นโยบายหรือหน่วยงานกำกับต้องการให้ข้อมูลอยู่ในประเทศ ภูมิภาคในประเทศคือจุดเริ่มต้นโดยปริยาย

มีข้อควรระวังสองประการ ประการแรก ภูมิภาคที่เปิดใหม่ไม่ได้มีบริการครบทุกบริการตั้งแต่วันแรก ควรตรวจสอบรายการบริการของภูมิภาคสำหรับบริการแบบ Managed ทุกตัวในแบบออกแบบก่อนตัดสินใจ และเตรียมทางเลือกสำรอง (บริการอื่น หรือภูมิภาคอื่นสำหรับส่วนประกอบนั้น) ประการที่สอง ถิ่นที่อยู่ของข้อมูลเป็นการตัดสินใจเชิงนโยบายก่อนจะเป็นเรื่องทางเทคนิค กฎหมายคุ้มครองข้อมูลส่วนบุคคล เช่น PDPA อนุญาตให้โอนข้อมูลข้ามพรมแดนได้ภายใต้เงื่อนไข และหน่วยงานกำกับรายอุตสาหกรรม เช่น ในภาคการเงิน อาจมีข้อกำหนดของตนเอง ควรระบุเป็นลายลักษณ์อักษรว่าข้อมูลประเภทใดต้องอยู่ในประเทศ และประเภทใดทำสำเนาไปต่างประเทศเพื่อการกู้คืนระบบได้ และให้ฝ่ายกฎหมายและฝ่ายกำกับการปฏิบัติตามข้อกำหนดยืนยัน จากนั้นจึงกำหนดเป็นข้อจำกัดด้านภูมิภาคในนโยบายขององค์กร เพื่อป้องกันการสร้างทรัพยากรผิดที่ตั้งแต่ต้น แทนที่จะมาพบภายหลัง

การกู้คืนระบบจากภัยพิบัติก็ต้องการความชัดเจนเช่นกัน ภายในภูมิภาคเดียว Availability Zone หลายแห่งช่วยป้องกันความล้มเหลวของศูนย์ข้อมูลแห่งใดแห่งหนึ่ง สำหรับการป้องกันเหตุการณ์ระดับภูมิภาค ต้องตัดสินใจว่าจะใช้ภูมิภาคที่สองสำหรับการสำรองข้อมูลหรือระบบสำรองได้หรือไม่ ควรเป็นภูมิภาคใด และธุรกิจพร้อมลงทุนสำหรับระยะเวลาการกู้คืน (RTO) และจุดกู้คืนข้อมูล (RPO) ระดับใด

Terraform: Landing Zone ในรูปแบบโค้ด

ทุกสิ่งใน Landing Zone ที่กำหนดเป็นโค้ดได้ควรกำหนดเป็นโค้ด ได้แก่ บัญชีและนโยบายขององค์กร เครือข่ายและการกำหนดเส้นทาง การจัดการตัวตนและ Role การบันทึก Log และร่องรอยการตรวจสอบ กุญแจเข้ารหัส นโยบายการสำรองข้อมูล งบประมาณและการแจ้งเตือน เราเลือกใช้ Terraform เพราะเป็นแบบ Declarative ไม่ผูกกับผู้ให้บริการรายใด และตรวจทานได้ใน Pull Request เดียวกับโค้ดแอปพลิเคชัน

แนวปฏิบัติบางประการช่วยให้จัดการได้ง่าย จัดเก็บ State ไว้ภายนอกพร้อมกลไกล็อก โดยแยกหนึ่ง State ต่อหนึ่งสภาพแวดล้อมและต่อหนึ่งส่วนประกอบเชิงตรรกะ เพื่อไม่ให้ความผิดพลาดในจุดหนึ่งทำให้อีกจุดเสียหาย สร้าง Module ขนาดเล็กที่ตั้งชื่อชัดเจนสำหรับสิ่งที่ต้องสร้างซ้ำ (บริการพร้อม Container Definition, กฎของ Load Balancer, IAM Role และ Log Group) และกำหนดเวอร์ชัน ติด Tag ทุกทรัพยากรด้วยเจ้าของ สภาพแวดล้อม แอปพลิเคชัน และศูนย์ต้นทุน จาก Module การติด Tag เพียงชุดเดียว เพราะการควบคุมต้นทุนในภายหลังต้องอาศัยข้อมูลนี้ รัน Plan ทุกครั้งที่มีการเปลี่ยนแปลง กำหนดให้ต้องผ่านการตรวจทาน และ Apply จาก Pipeline แทนการ Apply จากเครื่องส่วนตัว ตรวจจับ Drift ตามกำหนดเวลา และถือว่าการแก้ไขผ่าน Console ด้วยมือเป็นเหตุการณ์ที่ต้องแก้ไขให้ตรงกัน ไม่ใช่เรื่องปกติแบบใหม่

ผลลัพธ์คือ สภาพแวดล้อมสำหรับระลอกที่สองเป็นเพียง Pull Request หนึ่งรายการ ไม่ใช่โครงการใหม่ทั้งโครงการ

เปรียบเทียบรูปแบบการสลับระบบ

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

รูปแบบวิธีการทำงานเหมาะสำหรับการหยุดให้บริการและการย้อนกลับ
Big-bang (ออฟไลน์)หยุดระบบต้นทาง คัดลอกข้อมูล เริ่มระบบเป้าหมาย แล้วสลับ DNS หรือ Endpointระบบขนาดเล็ก งานประมวลผลแบบ Batch และเครื่องมือภายในที่มีช่วงเวลาปิดปรับปรุงระยะเวลาหยุดให้บริการเท่ากับเวลาที่ใช้คัดลอกข้อมูล การย้อนกลับทำได้ง่าย เพียงชี้กลับไปยังระบบต้นทางที่ไม่ได้แตะต้อง
ทำสำเนาข้อมูล แล้วจึงสลับทำสำเนาฐานข้อมูลไปยังระบบเป้าหมายอย่างต่อเนื่อง (เช่น ด้วยบริการทำสำเนาแบบ Managed) ขณะที่ระบบต้นทางยังทำงาน แล้วซิงโครไนซ์ครั้งสุดท้ายและสลับในช่วงการสลับระบบฐานข้อมูลและ ERP ที่ยอมรับการหยุดให้บริการนานไม่ได้ แต่ยอมรับการหยุดช่วงสั้น ๆ ได้หยุดให้บริการเป็นนาที การย้อนกลับต้องใช้การทำสำเนาย้อนทิศทาง หรือยอมรับการสูญเสียข้อมูลนับตั้งแต่การสลับ ซึ่งต้องตัดสินใจไว้ล่วงหน้า
Blue-greenสร้างและทดสอบสภาพแวดล้อมเป้าหมายให้พร้อมสมบูรณ์คู่กับระบบต้นทาง แล้วสลับการรับส่งข้อมูลที่ Load Balancer หรือ DNS ในขั้นตอนเดียวWorkload แบบ Stateless และชั้นเว็บ รวมถึงแอปพลิเคชันที่ย้ายชั้นข้อมูลไปแล้วแทบไม่มีการหยุดให้บริการ การย้อนกลับคือการสลับแบบเดียวกันในทิศทางตรงข้าม ตราบเท่าที่ชั้นข้อมูลใช้ร่วมกันหรือซิงโครไนซ์กันอยู่
Canary / แบบถ่วงน้ำหนักส่งการรับส่งข้อมูลส่วนน้อย (ตามน้ำหนัก ภูมิภาค หรือกลุ่มผู้ใช้) ไปยังระบบเป้าหมาย แล้วเพิ่มสัดส่วนขึ้นเมื่อมีความมั่นใจมากขึ้นแอปพลิเคชันที่ให้บริการลูกค้าซึ่งมีผู้ใช้จำนวนมาก เพื่อตรวจพบปัญหาก่อนที่ทุกคนจะเห็นไม่มีการหยุดให้บริการตามหลักการออกแบบ การย้อนกลับคือการลดน้ำหนัก ต้องจัดการเซสชันและความสอดคล้องของข้อมูลทั้งสองฝั่ง
Strangler (ทีละส่วน)กำหนดเส้นทางทีละหน้าที่ไปยังบริการใหม่ในระบบเป้าหมาย ระบบเดิมจะเล็กลงเรื่อย ๆ จนปลดระวางระบบ Monolith ขนาดใหญ่ที่กำลัง Refactor และโครงการปรับปรุงระบบให้ทันสมัยที่ใช้เวลาหลายปีไม่มีการหยุดให้บริการในแต่ละขั้น การย้อนกลับทำเป็นรายหน้าที่ ใช้เวลาโดยรวมนานที่สุด แต่ความเสี่ยงต่อการเปลี่ยนแปลงแต่ละครั้งต่ำที่สุด

การซักซ้อมการย้อนกลับ

คู่มือปฏิบัติงานทุกฉบับมีหัวข้อการย้อนกลับ แต่มีไม่กี่ทีมที่เคยทำจริง ควรซักซ้อมการสลับระบบทั้งหมดอย่างน้อยหนึ่งครั้งในสภาพแวดล้อมที่ไม่ใช่ Production โดยใช้บุคลากรชุดเดียวกัน รายการตรวจสอบเดียวกัน และจับเวลา แล้วจึงซักซ้อมการย้อนกลับ กำหนดเกณฑ์ Go/No-go ไว้ก่อนวันจริง (การทดสอบใดต้องผ่าน ผู้มีส่วนได้ส่วนเสียรายใดต้องยืนยัน ภายในเวลาใด) และระบุผู้ตัดสินใจเพียงคนเดียว กำหนดจุดที่ย้อนกลับไม่ได้ให้ชัดเจน คือช่วงเวลาที่ธุรกรรมใหม่มีอยู่เฉพาะในระบบเป้าหมาย และการย้อนกลับหมายถึงต้องกระทบยอดข้อมูลด้วยมือ

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

ควบคุมต้นทุนตั้งแต่วันแรก

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

  • งบประมาณพร้อมการแจ้งเตือนรายบัญชีและรายแอปพลิเคชัน ซึ่งเจ้าของแอปพลิเคชันและฝ่ายการเงินมองเห็นได้
  • Tag ที่บังคับใช้ด้วยนโยบาย เพื่อให้ระบุที่มาของค่าใช้จ่ายได้ทั้งหมด
  • ตั้งเวลาปิดสภาพแวดล้อมที่ไม่ใช่ Production นอกเวลาทำงาน หรือสร้างขึ้นเมื่อต้องการจาก Terraform
  • ทบทวนการปรับขนาดทรัพยากรหนึ่งเดือนหลังแต่ละระลอก เพราะการย้ายระบบมักกำหนดขนาดเผื่อความปลอดภัย ไม่ใช่เพื่อประสิทธิภาพ
  • ใช้ราคาแบบผูกพัน (Savings Plans หรือ Reserved Capacity) หลังจากการใช้งานคงที่และเข้าใจรูปแบบแล้วเท่านั้น
  • กฎวงจรชีวิตของพื้นที่จัดเก็บ: Log ข้อมูลสำรอง และ Snapshot ย้ายไปยังชั้นจัดเก็บที่ถูกกว่าและหมดอายุตามกำหนดเวลา
  • ใช้บริการแบบ Managed และ Container ในส่วนที่ช่วยลดภาระการดำเนินงานได้จริง การออกแบบสถาปัตยกรรมใหม่ไม่ใช่เงื่อนไขจำเป็นของต้นทุนที่ลดลง
  • ทบทวนต้นทุนทุกเดือนด้วยความเข้มงวดเท่ากับการทบทวนความพร้อมใช้งาน

ความเห็นที่สองสำหรับแผนระลอกของคุณ

ส่งแผนระลอกของคุณมาให้เรา แล้วเราจะบอกว่าเราจะทำสิ่งใดต่างออกไป ทีม Cloud และโครงสร้างพื้นฐานของเราสร้างสภาพแวดล้อม AWS ที่จัดการด้วย Terraform และดำเนินการย้ายระบบให้องค์กร รวมถึงการย้ายเข้าสู่ AWS Asia Pacific (Bangkok) Region