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

คุณต้องมีบัญชี AWS จึงจะเข้าถึงบทแนะนำนี้ได้
สร้างบัญชีฟรีไม่มีค่าบริการเพิ่มเติมสำหรับ AWS Step Functions หรือ Amazon SQS ทรัพยากรต่างๆ ที่คุณสร้างขึ้นในบทแนะนำสอนการใช้งานนี้จะมีคุณสมบัติแบบ Free Tier
ก. เปิด AWS Management Console เพื่อให้คุณเปิดคำแนะนำทีละขั้นตอนนี้ค้างไว้ได้ เมื่อหน้าจอโหลดข้อมูลแล้ว ให้ใส่ชื่อผู้ใช้และรหัสผ่านของคุณเพื่อเริ่มต้นใช้งาน จากนั้นพิมพ์ SQS ในแถบค้นหาแล้วเลือก Simple Queue Service เพื่อเปิดคอนโซลบริการ
ในขั้นตอนนี้ คุณจะได้สร้างและกำหนดค่าคิวของ Amazon SQS ตัวคิวมีความน่าเชื่อถือ บัฟเฟอร์ที่ปรับขนาดได้หลากหลายที่จัดเก็บข้อความขณะมีการรับส่งระหว่างแอปพลิเคชันหรือไมโครเซอร์วิสที่มีการกระจาย คิวจะช่วยในการปลดแอปพลิเคชัน เชื่อมต่อไมโครเซอร์วิส รวมงาน หรือจัดเก็บการแจ้งเตือน
กรณีการใช้งานของเราในบทแนะนำสอนการใช้งานนี้จะจำลองการจัดเก็บคำขอยืนยันคลังข้อมูลจากคำสั่งซื้อที่เข้ามาในแอปพลิเคชันอีคอมเมิร์ซ
ขั้นตอนถัดไปของคุณคือ การออกแบบเวิร์กโฟลว์ที่อธิบายลักษณะคำสั่งซื้อของอีคอมเมิร์ซที่จะประมวลผล เวิร์กโฟลว์จะอธิบายถึงกระบวนการในฐานะเป็นชุดงานแยกส่วนที่ต้องสามารถทำซ้ำไปเรื่อยๆ ได้
จากนั้น คุณจะออกแบบเวิร์กโฟลว์ของคุณใน AWS Step Functions เวิร์กโฟลว์ของคุณจะส่งคำขอยืนยันคลังข้อมูลจากไมโครเซอร์วิส ไมโครเซอร์วิสหลายรายการใช้คิวเพื่อรับคำขอ ในบทแนะนำสอนการใช้งานนนี้ คุณจะได้ใช้ฟังก์ชัน AWS Lambda เพื่อเป็นตัวแทนไมโครเซอร์วิส
ก. เปิด คอนโซล AWS Step Functions เลือก Author with code snippets (เขียนด้วยส่วนย่อยของโค้ด) แล้วตั้งชื่อเครื่องสถานะของคุณว่า InventoryStateMachine
ข. แทนที่เนื้อหาของหน้าต่างคำจำกัดความของเครื่องสถานะด้วยคำจำกัดความของเครื่องสถานะ Amazon States Language (ASL) ด้านล่างนี้ Amazon States Language คือ ภาษาที่มีโครงสร้างเหมือนกับ JSON ที่ใช้เพื่อจำกัดความเครื่องสถานะของคุณ
เครื่องสถานะนี้ใช้สถานะของงานเพื่อป้อนข้อความในคิว SQS สถานะของงานถูกกำหนดค่าไว้สำหรับรูปแบบการเรียกกลับ เมื่อคุณต่อท้าย .waitForTaskToken เข้ากับทรัพยากรของคุณ Step Functions จะเพิ่มโทเค็นของงานเข้ากับเพย์โหลด JSON และรอการเรียกกลับ ไมโครเซอร์วิสจะสามารถส่งผลลัพธ์กลับไปยัง Step Functions โดยการเรียกใช้ Step Functions API
{ "Comment": "An example of the Amazon States Language for starting a callback task.", "StartAt": "Check Inventory", "States": { "Check Inventory": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "<INSERT SQS QUEUE URL HERE>", "MessageBody": { "MessageTitle": "Callback Task started by Step Functions", "TaskToken.$": "$$.Task.Token" } }, "Next": "Notify Success", "Catch": [ { "ErrorEquals": [ "States.ALL" ], "Next": "Notify Failure" } ] }, "Notify Success": { "Type": "Pass", "Result": "Callback Task started by Step Functions succeeded", "End": true }, "Notify Failure": { "Type": "Pass", "Result": "Callback Task started by Step Functions failed", "End": true } } }
ง. คลิกปุ่มรีเฟรชเพื่อให้ Step Functions แปลคำจำกัดความของเครื่องสถานะ ASL ไปยังเวิร์กโฟลว์การแสดงผลด้วยภาพ คุณจะเห็นได้ชัดเจนว่ากระบวนการได้รับการอธิบายอย่างถูกต้องเมื่อตรวจสอบเวิร์กโฟลว์การแสดงผลด้วยภาพ เมื่อไมโครเซอร์วิสส่งผลลัพธ์กลับมา เครื่องสถานะจะแสดงความคืบหน้าว่าเป็นรุ่นสำเร็จ หากมีความผิดปกติ คุณสามารถจับข้อผิดพลาดนั้นและหารุ่นที่ถูกต้องเพื่อดำเนินการแก้ไขได้
คลิก Next (ถัดไป)
จ. หลังจากนั้น คุณจะเพิ่มบทบาท IAM ไปที่เวิร์กโฟลว์ของคุณ เลือก Create an IAM role for me (สร้างบทบาท IAM สำหรับฉัน) และตั้งชื่อว่า inventory-state-machine-role Step Functions จะทำการวิเคราะห์เวิร์กโฟลว์ของคุณและสร้างนโยบาย IAM ที่มีทรัพยากรที่ใช้โดยเวิร์กโฟลว์ของคุณ คลิก Create state machine (สร้างเครื่องสถานะ) คุณจะเห็นแบนเนอร์สีเขียวอ่อนระบุว่าสร้างเครื่องสถานะเรียบร้อยแล้ว
AWS IAM คือ บริการบนเว็บที่ช่วยคุณควบคุมการเข้าถึงทรัพยากร AWS อย่างปลอดภัย ในขั้นตอนนี้ คุณจะได้สร้างบทบาท IAM ที่จะอนุญาตให้ Step Functions เข้าถึง SQS ได้
ก. ในอีกหน้าต่างเบราว์เซอร์หนึ่ง ให้เปิด AWS Management Console เมื่อหน้าจอโหลดแล้ว ให้พิมพ์ IAM ในแถบค้นหา จากนั้นเลือก IAM เพื่อเปิดคอนโซลบริการ
ในขั้นตอนนี้ คุณจะสร้างฟังก์ชัน Lambda ที่จะจำลองไมโครเซอร์วิสคลังข้อมูล ฟังก์ชัน Lambda จะดึงข้อความจาก SQS และจะส่งข้อความกลับไปยัง Step Functions ซึ่งแสดงผลของคำขอ
ค. เลือก Author from scratch (เขียนใหม่ตั้งแต่ต้น) เอาไว้ ถัดไป ให้กำหนดค่าฟังก์ชัน Lambda แรกของคุณดังนี้:
สำหรับชื่อ ให้พิมพ์ว่า Inventory (คลังข้อมูล)
สำหรับรันไทม์ให้เลือก Node.js 8.10
สำหรับบทบาท ให้เลือก Use an existing role (ใช้บทบาทที่มี)
เลือก inventory-lambda-role จากรายการ
คลิก Create function (สร้างฟังก์ชัน)
ง. แทนที่เนื้อหาหน้าต่างโค้ดของฟังก์ชันด้วยโค้ดต่อไปนี้ จากนั้นคลิก Save (บันทึก)
console.log('Loading function'); const aws = require('aws-sdk'); exports.handler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"Callback task completed successfully.\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };
เวิร์กโฟลว์ไร้เซิร์ฟเวอร์พร้อมดำเนินการแล้ว การดำเนินการเครื่องสถานะเป็นอินสแตนซ์หนึ่งของเวิร์กโฟลว์ของคุณและจะเกิดขึ้นในแต่ละครั้งที่ Step Functions รันและทำงาน ในแต่ละเครื่องสถานะ Step Functions จะมีการดำเนินการหลายรายการพร้อมๆ กันซึ่งคุณสามารถควบคุมได้จากคอนโซล Step Functions (ซึ่งคุณกำลังจะได้ทำในขั้นตอนถัดไป) หรือใช้ AWS SDK, การดำเนินการ API ของ Step Functions หรือ AWS CLI การดำเนินงานจะรับอินพุต JSON และสร้างเอาต์พุต JSON
จ. เมื่อเวิร์กโฟลว์ของคุณเริ่มดำเนินการ สีบานหน้าต่างเวิร์กโฟลว์การแสดงผลด้วยภาพจะเปลี่ยนไปตามแต่ละขั้นตอน รอสักครู่เพื่อให้ดำเนินการเสร็จสมบูรณ์ จากนั้น ในบานหน้าต่าง Execution details (รายละเอียดการดำเนินการ) ให้คลิก Input (อินพุต) และ Output (เอาต์พุต) เพื่อดูอินพุตและผลลัพธ์ของเวิร์กโฟลว์ของคุณ
ฉ. Step Functions ช่วยให้คุณสามารถตรวจสอบขั้นตอนต่างๆ ในการดำเนินการของเวิร์กโฟลว์ได้ รวมถึงอินพุตและเอาต์พุตของแต่ละสถานะ คลิกบนแต่ละงานในเวิร์กโฟลว์ของคุณและเปิดช่อง Input (อินพุต) และ Output (เอาต์พุต) ใต้ส่วน Step details (รายละเอียดขั้นตอน) คุณจะเห็นว่าเพย์โหลดอินพุตของคุณที่นำเข้าไปยังเครื่องสถานะได้ถูกส่งต่อจากแต่ละขั้นตอนไปยังอีกขั้นตอนหนึ่งแล้ว และเพย์โหลดนั้นจะอัปเดตเมื่อแต่ละขั้นตอนเสร็จสิ้น
ในขั้นตอนนี้ คุณจะยกเลิกทรัพยากรที่เกี่ยวข้องกับ AWS Step Functions และ AWS Lambda
ข้อสำคัญ: การยกเลิกทรัพยากรที่ไม่ได้ใช้งานจะช่วยลดต้นทุนและเป็นแนวทางปฏิบัติที่ดีที่สุด คุณเสียค่าบริการหากไม่ได้ลบทรัพยากรออก
คุณได้ดำเนินการจัดประสานไมโครเซอร์วิสในระบบคลาวด์เข้ากับคิวข้อความโดยใช้ AWS Step Functions และ Amazon SQS Step Functions มีความเหมาะสมอย่างยิ่งเมื่อคุณต้องการประสานงานทรัพยากรแอปพลิเคชันของคุณเมื่อต้องพิจารณาถึงผลิตภาพและความคล่องตัวเป็นหลัก
เมื่อคุณได้เรียนรู้วิธีการจัดประสานไมโครเซอร์วิสตามคิวแล้ว คุณสามารถดำเนินการต่อไปยังบทแนะนำสอนการใช้งานถัดไป ซึ่งคุณจะได้เรียนรู้วิธีการใช้งาน Step Functions เพื่อจัดการกับข้อผิดพลาด คุณจะได้สร้างเครื่องสถานะที่มีช่อง Retry และ Catch ที่ตอบสนองต่อโค้ดตอบสนองจาก API จำลองที่สร้างขึ้นตามประเภทข้อความแสดงข้อผิดพลาด ซึ่งกระบวนการนี้เรียกว่าการจัดการกับข้อผิดพลาดของฟังก์ชัน
เรียนรู้เพิ่มเติม
ดูรายละเอียดเพิ่มเติม
สำรวจ AWS Step Functions