เมื่ออาทิตย์ที่แล้วได้มีโอกาสจัด session 2 วัน เกี่ยวกับ Infrastructure-as-a-Code ผ่าน Terraform ให้กับเพื่อนๆ พี่ๆ น้องๆ ในบริษัท ครั้งนี้จะนำ feedback จากครั้งที่แล้ว มาปรับปรุงให้ดีขึ้น

Session วันแรก

เนื้อหาที่ได้นำเสนอไปมีคร่าวๆ ประมาณนี้

  • เป้าหมายของ DevOps 5 ข่้อ ได้แก่ Communication, Collaboration, Integration, Automation, Measurement
  • ปัญหาของการจัดการ infrastructure กับระบบที่ซับซ้อน พร้อมตัวอย่าง
  • Infrastructure-as-a-Code เข้ามาช่วยแก้ปัญหาได้อย่างไร
  • Terraform ทำงานอย่างไร มี lifecycle init-plan-validate-apply-destroy
  • Terraform state management
  • Hands-on workshop ซึ่งครอบคลุมเรื่อง
    • AWS CLI + credentials + configuration
    • Provider definition
    • Resource definition
    • Terraform CLI
    • Terraform buit-in function เช่น jsonencode และ filebase64sha256
    • Resource dependency

Session วันที่สอง

เป็น hands-on workshop ที่ทำต่อจากวันก่อนเลย จะเน้นไปในส่วนของการ refactoring ผ่าน concept ต่างๆ

  • Modules
  • Variables declaration and file (tfvars)
  • Outputs
  • Terraform remote state

การเตรียม workshop ทั้ง 2 วัน

  • เนื่องจากบริษัทใช้ AWS ดังนั้นโจทย์ที่ใช้ก็นำมาจาก AWS tutorials เหมือนกัน ซึ่งมี instruction ครบ เพียงแต่เราจะมาทำผ่าน Terraform เพื่อให้คนเรียนเห็นภาพการใช้งานแบบเปรียบเทียบกันได้เลย
  • ใช้ AWS account ของตัวเองเพื่อคุม permission และ cost ที่ต้องการได้ เพราะบริษัทเค้ามี policy อ่ะนะ
  • ก่อนเริ่ม session สร้าง AWS user และ replicate role ที่มี policy พอที่จะ provision resource ได้ จากนั้นส่ง access key ให้แต่ละคนไป configure
  • ไม่ได้แนะนำ AWS security best practices ไปเพราะจัดได้อีก session นึง แต่ย้ำกับคนเรียนไปแล้วระดับนึง
  • หลีกเลี่ยง built-in function ที่มี breaking change ใน version ใหม่ๆ เช่น list

การปรับปรุงจาก session ครั้งก่อน

  • สอนเร็วเกินไป (ถามแต่ไม่มีใครตอบ เดาว่าเร็วไปละกัน ฮ่าๆๆ)
  • มี Interaction กับคนเรียนมากกว่านี้หน่อย
  • ทำตามไม่ได้เนื่องจากใช้คำสั่งบางอย่างใน Linux (audience ส่วนใหญ่ใช้ Windows) เช่น mkdir หรือ ls

ปัญหาที่เจอ

  • มีคนไม่ได้เข้า workshop วันแรก แต่เข้าแค่วันที่สอง ทำให้เริ่มไม่ได้เพราะเราอิง code จากวันแรก เลยแก้โดยการ push code วันแรกขึ้น remote repository ก่อนจะเริ่ม workshop

Repositories