Other Serverless — Step Functions, AppSync & Amplify
Step Functions, AppSync และ Amplify สำหรับ DVA-C02
01ภาพรวม: Serverless Orchestration & Frontend
หัวข้อนี้รวม 3 บริการ serverless ที่ออกสอบใน DVA-C02 โดย Step Functions เป็นพระเอกที่ออกสอบบ่อยที่สุด (orchestrate workflow), ส่วน AppSync (managed GraphQL) และ Amplify (full-stack development) ออกสอบน้อยกว่าแต่ก็ควรรู้คอนเซ็ปต์หลัก
- AWS Step Functions — ประสาน (orchestrate) Lambda และ AWS services เป็น workflow ด้วย visual state machine เขียนด้วย JSON (Amazon States Language)
- AWS AppSync — managed GraphQL API พร้อม real-time subscriptions และ offline sync
- AWS Amplify — ชุดเครื่องมือพัฒนา full-stack web/mobile app (frontend + serverless backend)
02Step Functions: State Machine & ASL
AWS Step Functions ใช้สร้าง serverless workflow ในรูปแบบ state machine มองเห็นเป็น flow diagram ได้ใน console เขียนนิยามด้วย Amazon States Language (ASL) ซึ่งเป็น JSON ใช้ประสานงานหลาย service เช่น Lambda, ECS, DynamoDB, SNS, SQS โดยจัดการ error, retry, parallel ให้อัตโนมัติ
- เริ่ม execution ด้วย StartExecution API หรือ trigger จาก API Gateway, EventBridge
- แต่ละ run คือ execution หนึ่งครั้ง มี input/output เป็น JSON
- มองเห็น visual workflow และ execution history สำหรับ audit/debug (เด่นใน Standard)
- ใช้ IAM role ในการเรียก service อื่นแทน workflow
03State Types ใน Amazon States Language
ASL มี state หลายประเภท ข้อสอบชอบถามว่า state ไหนใช้ทำอะไร ให้จำให้แม่น
04Error Handling: Retry & Catch
Step Functions จัดการ error ที่ระดับ state ด้วย 2 กลไกหลัก ที่มักใช้คู่กัน
- Retry — retry state อัตโนมัติเมื่อเกิด error: กำหนด ErrorEquals, IntervalSeconds, MaxAttempts, BackoffRate (exponential backoff)
- Catch — เมื่อ retry หมดแล้วยัง fail ให้ route ไป fallback state ที่กำหนด: กำหนด ErrorEquals และ Next
- Error names พิเศษ: States.ALL (จับทุก error), States.Timeout, States.TaskFailed, States.Permissions
05Standard vs Express Workflow
Step Functions มี workflow 2 ประเภท เป็นจุดที่ออกสอบ scenario บ่อยมาก ต้องเลือกให้ถูกตามโจทย์
| คุณสมบัติ | Standard Workflow | Express Workflow |
|---|---|---|
| Max duration | สูงสุด 1 ปี | สูงสุด 5 นาที |
| Execution semantics | Exactly-once | Async = at-least-once / Sync = at-most-once |
| Execution rate | สูงถึง ~2,000/วินาที | สูงมาก > 100,000/วินาที |
| Pricing | ตามจำนวน state transitions | ตามจำนวน execution + duration + memory |
| Execution history | มีใน console (audit/debug ได้) | ส่ง log ไป CloudWatch Logs |
| Use case | Long-running, auditable, orchestration | High-volume event processing, short tasks |
06Service Integration & Wait for Task Token
Step Functions เชื่อมต่อ service อื่นได้ 3 รูปแบบ (integration patterns) ซึ่งสำคัญมากในข้อสอบ
- Request Response (default) — เรียก service แล้วไป state ถัดไปทันที ไม่รอผลงานเสร็จ
- Run a Job (.sync) — เรียกแล้ว รอจน job เสร็จ (เช่น ECS task, Batch, Glue) จึงไปต่อ
- Wait for Callback (.waitForTaskToken) — pause workflow จนกว่าจะได้รับ task token กลับ
Wait for Task Token ใช้เมื่อต้อง pause รอ external system/human เป็นเวลานาน: Step Functions ฝัง task token ส่งไปกับงาน แล้ว external worker เรียก SendTaskSuccess (พร้อม token) เพื่อให้ workflow ไปต่อ หรือ SendTaskFailure เมื่อล้มเหลว และใช้ SendTaskHeartbeat เพื่อแจ้งว่ายังทำงานอยู่ (กัน timeout)
07AWS AppSync (Managed GraphQL)
AWS AppSync เป็น managed service สำหรับสร้าง GraphQL API ประกอบด้วย schema (กำหนด type/query/mutation/subscription) และ resolvers (เชื่อม field กับ data source) จุดเด่นคือ real-time subscriptions (ผ่าน WebSocket) และ offline data sync เหมาะกับ mobile/web app
- Data sources ที่รองรับ: DynamoDB, Aurora (RDS), Lambda, OpenSearch, HTTP endpoints
- Real-time — client subscribe การเปลี่ยนแปลงข้อมูลผ่าน GraphQL subscriptions (WebSocket)
- Offline sync — เก็บข้อมูล local แล้ว sync เมื่อ online (มักใช้ผ่าน Amplify DataStore)
- ดึงข้อมูลได้พอดีตามที่ client ขอ (ลด over-fetching เทียบกับ REST)
| Authorization Mode | ใช้เมื่อ |
|---|---|
| API_KEY | dev/testing หรือ public access ชั่วคราว |
| AWS_IAM | ผู้ใช้/role ใน AWS (IAM credentials, SigV4) |
| Amazon Cognito User Pools | ผู้ใช้แอปที่ login ผ่าน Cognito |
| OpenID Connect (OIDC) | identity provider ภายนอกที่รองรับ OIDC |
| AWS Lambda | custom authorization logic เขียนเอง |
08AWS Amplify (Full-Stack Development)
AWS Amplify เป็นชุดเครื่องมือพัฒนา full-stack web/mobile app ครบวงจร เปรียบได้กับ Elastic Beanstalk แต่สำหรับ frontend + serverless backend ช่วยให้ตั้งค่า auth, API, storage และ deploy ได้รวดเร็ว
- Amplify Hosting — host frontend พร้อม CI/CD อัตโนมัติจาก Git repository (build & deploy)
- Amplify CLI / Amplify Studio — สร้างและจัดการ backend resources แบบ guided
- DataStore — on-device storage ที่ sync กับ cloud (AppSync) อัตโนมัติ รองรับ offline
- Integrations — เชื่อม Cognito (auth), AppSync/API Gateway (API), S3 (storage) ได้ง่าย
คำถามทบทวน
ทดสอบความเข้าใจหัวข้อ Other Serverless — Step Functions, AppSync & Amplify
20 ข้อ · เลือกคำตอบเพื่อดูเฉลยและคำอธิบาย
1.บริษัทต้องการ orchestrate workflow ที่มีหลายขั้นตอน โดยบาง step ต้อง pause เพื่อรอการอนุมัติจากมนุษย์ (human approval) ซึ่งอาจใช้เวลาหลายชั่วโมง ก่อนจะดำเนินการต่อ ควรใช้ integration pattern ใดใน Step Functions?
2.แอปพลิเคชันต้องการ process event ปริมาณสูงมาก (high-volume) เช่น IoT data streaming, แต่ละ workflow ทำงานเสร็จภายในไม่กี่วินาที และต้องการต้นทุนต่ำ ควรเลือก Step Functions workflow แบบใด?
3.ใน Amazon States Language (ASL) state ประเภทใดใช้สำหรับ branching logic เลือกเส้นทางถัดไปตามเงื่อนไขของ input?
4.ต้องการประมวลผล array ของ item จำนวนมาก โดยรัน step เดียวกันกับแต่ละ item แบบ dynamic parallelism ควรใช้ state ประเภทใด?
5.ใน Step Functions เมื่อ Task state ที่เรียก Lambda เกิด error ต้องการ retry แบบ exponential backoff ก่อน แล้วถ้ายัง fail ให้ไปยัง state จัดการ error ควรกำหนดอะไรใน ASL?
6.AWS AppSync เป็น managed service สำหรับเทคโนโลยีใด?
7.แอป mobile ต้องการ real-time updates เมื่อข้อมูลเปลี่ยน และทำงานต่อได้แม้ offline แล้ว sync ภายหลัง ควรใช้บริการใด?
8.AppSync รองรับ authorization mode ใดบ้างสำหรับการรักษาความปลอดภัยของ GraphQL API?
9.นักพัฒนาต้องการ deploy full-stack web app (React frontend + serverless backend) พร้อม CI/CD, hosting, และเชื่อม Cognito/AppSync/S3 ได้ง่าย ควรใช้บริการใด?
10.Standard Workflow ของ Step Functions มี maximum execution duration เท่าใด?
11.Activity Task ใน Step Functions ใช้สำหรับอะไร?
12.ใน Express Workflow ของ Step Functions มี execution semantics แบบใด?
13.Step Functions สามารถ integrate กับ AWS service ใดได้โดยตรง (optimized integration)?
14.ใน ASL state ประเภทใดใช้สำหรับหยุด execution และทำเครื่องหมายว่า workflow สำเร็จ?
15.แอปต้องการ visual workflow ที่มี full execution history สำหรับ audit และ debugging ของ order processing ที่ใช้เวลาหลายวัน ควรเลือก workflow type ใด?
16.data source ใดที่ AppSync resolver สามารถเชื่อมต่อได้?
17.ในการ pause workflow ด้วย .waitForTaskToken แล้ว external worker ต้องเรียก API ใดเพื่อให้ workflow ดำเนินการต่อเมื่อสำเร็จ?
18.ข้อใดเป็นความแตกต่างด้าน pricing ระหว่าง Standard และ Express Workflow ที่ถูกต้อง?
19.Amplify DataStore ให้ความสามารถหลักด้านใดแก่ frontend app?
20.workflow ของ Step Functions ต้องการรัน sub-task หลายอันที่กำหนดไว้แน่นอนพร้อมกัน (เช่น เรียก 3 Lambda พร้อมกัน) แล้วรวมผลลัพธ์ ควรใช้ state ใด?