การทดสอบและการ deploy API

การพัฒนาแอปพลิเคชันบน AWS

Ricardo Sueiras

Principal Technologist

Infrastructure-as-Code สำหรับนักพัฒนา

 

iac

  • แอปแบบ cloud native ใช้ Infrastructure-as-Code (IaC) ในการ deploy
  • กำหนด cloud resource ในไฟล์ configuration
  • หลีกเลี่ยงการตั้งค่าด้วยตนเองใน AWS Management Console (clickops)
การพัฒนาแอปพลิเคชันบน AWS

AWS CloudFormation

 

cloudformation

  • เป็นบริการ IaC พื้นฐานของ AWS
  • กำหนด AWS resource ด้วย template แบบ YAML หรือ JSON
การพัฒนาแอปพลิเคชันบน AWS

AWS Cloud Development Kit (CDK)

 

cdk

  • CDK กำหนด IaC ด้วยโค้ด
  • เขียนด้วย Python, TypeScript, หรือ Java แทน YAML หรือ JSON
  • แอปจะถูก synthesize เป็น CloudFormation template เมื่อ deploy
การพัฒนาแอปพลิเคชันบน AWS

AWS Serverless Application Model (SAM)

  • ต่อยอดจาก CloudFormation
  • syntax ที่เรียบง่ายสำหรับ serverless resource และ API
  • ทำหน้าที่เป็น transformation layer
  • แปลง SAM syntax เป็น CloudFormation template แบบเต็ม

 

sam

การพัฒนาแอปพลิเคชันบน AWS

ฟีเจอร์ของ SAM

  • สร้าง IAM role แบบ least-privilege อัตโนมัติ และปรับแต่งเพิ่มเติมได้
  • กำหนด deployment pipeline เป็น configuration
  • package และ deploy ด้วย sam build และ sam deploy
  • ตรวจจับข้อผิดพลาดใน template ล่วงหน้าด้วย sam validate
  • จำลอง Lambda ในเครื่องด้วย sam local start-lambda
    • สร้าง local endpoint แบบถาวร

 

sam features

การพัฒนาแอปพลิเคชันบน AWS

การทดสอบด้วย SAM

  • build, invoke และทดสอบ serverless app ในเครื่องก่อน deploy
  • ทดสอบ Lambda function และการ integrate กับ API Gateway
  • invoke function ในเครื่องด้วย sam local invoke
    • เรียกใช้งานครั้งเดียว (one-shot)
  • จำลอง API Gateway ด้วย sam local start-api

 

testing with sam

การพัฒนาแอปพลิเคชันบน AWS

Unit tests

 

unit tests

  • ใช้ SAM ร่วมกับ unit test เพื่อตรวจสอบการทำงานของ Lambda
  • การทดสอบในเครื่องช่วยเร่ง development cycle
  • ใช้คู่กับ framework เช่น pytest, JUnit หรือ Jest
การพัฒนาแอปพลิเคชันบน AWS

ขั้นตอนการทดสอบ

 

test workflow

  • สร้าง test event ด้วย sam local generate-event
  • จะได้ไฟล์ JSON event เป็นผลลัพธ์
  • invoke ในเครื่องด้วย sam local invoke FunctionName -e event.json
  • เพิ่ม assertion ใน framework เพื่อตรวจสอบ response ก่อน deploy
การพัฒนาแอปพลิเคชันบน AWS

การ mock AWS service

 

mocking tests

  • ใช้การทดสอบในเครื่องร่วมกับ mocking library เช่น moto
  • โต้ตอบกับ AWS service จำลอง โดยไม่ต้องเรียกใช้งานจริง
  • ช่วยให้ทดสอบได้เร็วขึ้น
  • ลดต้นทุนการทดสอบ
  • ตรวจสอบสถานการณ์ผิดพลาด เช่น throttling หรือ failure
การพัฒนาแอปพลิเคชันบน AWS

Continuous integration และ continuous deployment (CI/CD)

  • SAM app มักถูก deploy ผ่าน CI/CD pipeline
  • ทำให้ขั้นตอน build, test, package และ deploy เป็นอัตโนมัติ
  • AWS CodeCommit เก็บโค้ดและ SAM template
  • AWS CodeBuild รันการทดสอบและ sam build
  • AWS CodePipeline ควบคุม workflow ทั้งหมด

 

cicd

การพัฒนาแอปพลิเคชันบน AWS

CI/CD workflow

  • commit source code และ SAM template ไปยัง repository
  • รันการทดสอบและการตรวจสอบแบบอัตโนมัติ
  • package แอปด้วย sam build
  • deploy resource ด้วย sam deploy
  • ติดตามผลหลัง deploy ด้วย CloudWatch

 

workflow

การพัฒนาแอปพลิเคชันบน AWS

การแก้ปัญหาการ deploy

  troubleshooting

  • การแก้ปัญหาเป็นทักษะสำคัญในการดูแลระบบ
  • ความล้มเหลวในการ deploy ที่พบบ่อย:
  • ปัญหาสิทธิ์ IAM
  • SAM หรือ CloudFormation template ไม่ถูกต้อง
  • การ package Lambda ล้มเหลวหรือ dependency หายไป
  • การตั้งค่า API Gateway ไม่ถูกต้อง
การพัฒนาแอปพลิเคชันบน AWS

การแก้ปัญหาการ deploy

  troubleshooting

  • SAM deploy ทำงานบน CloudFormation ภายใต้ประทุน
  • แสดง stack event และ rollback อัตโนมัติ
  • ช่วยระบุสาเหตุที่การ deploy ล้มเหลว
  • rollback เพื่อคืนค่าสถานะของ environment ก่อนหน้า
การพัฒนาแอปพลิเคชันบน AWS

การแก้ปัญหาการ deploy

  troubleshooting

  • แก้ปัญหาโดยใช้เครื่องมือต่อไปนี้:
  • CloudWatch Logs
  • log การ execute ของ API Gateway
  • Lambda logs
  • CloudWatch metrics
การพัฒนาแอปพลิเคชันบน AWS

มาฝึกกันเถอะ!

การพัฒนาแอปพลิเคชันบน AWS

Preparing Video For Download...