AWS Step Functions คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2023
What is AWS Step Functions
AWS Step Functions คือ serverless orchestration เซอร์วิสที่สามารถเชื่อมต่อและจัดการกระบวนการต่างๆ
ด้วยการควบคุมการจัดการคำสั่งต่างๆที่อยู่ใน Lambda function และหลายๆ APIs ที่ทำให้ง่ายต่อการจัดการกระบวนการต่างๆที่เราต้องการจะใช้งานภายในคำสั่ง ตัวอย่างเช่น ETL และ batch processing
ประเภทของการประมวลผลที่ดำเนินการสามารถแสดงให้เห็นได้ในรูปแบบของ workflow บน AWS management console ซึ่งสิ่งนี้สร้างความประทับใจได้อย่างดีกับการจัดการระบบ Job จากจุดที่มีการกระบวนการทำงานที่เชื่อมโยงกัน
workflow ถูกดีไซน์ใน AWS Step Functions สตูดิโอ สามารถเข้าไปศึกษาข้อมูลเพิ่มเติมได้ที่ลิ้งค์ด้านล่างนี้เลยครับ
เพิ่มเติมคือ AWS Step Functions Workflow Studio โดยตัว workflows สามารถจัดการได้ไม่ใช่แค่ GUI แต่รวมถึง CLI ที่การแสดง workflow นี้ใน ASL (Amazon States Language) มีดังต่อไปนี้ (สามารถคลิ้กตัวอย่าง ASL)
ตัวอย่าง ASL (คลิ้กเพื่อแสดง)
{
"Comment": "A description of my state machine",
"StartAt": "Lambda Invoke",
"States": {
"Lambda Invoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"Payload.$": "$"
},
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"Next": "SNS Publish"
},
"SNS Publish": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"Message.$": "$"
},
"Next": "Choice"
},
"Choice": {
"Type": "Choice",
"Choices": [
{
"Next": "Map"
}
],
"Default": "Glue StartJobRun"
},
"Map": {
"Type": "Map",
"Next": "Step Functions StartExecution",
"Iterator": {
"StartAt": "DescribeAlarms",
"States": {
"DescribeAlarms": {
"Type": "Task",
"End": true,
"Parameters": {},
"Resource": "arn:aws:states:::aws-sdk:cloudwatch:describeAlarms"
}
}
}
},
"Step Functions StartExecution": {
"Type": "Task",
"Resource": "arn:aws:states:::states:startExecution.sync:2",
"Parameters": {
"StateMachineArn": "arn:aws:states:REGION:ACCOUNT_ID:stateMachine:STATE_MACHINE_NAME",
"Input": {
"StatePayload": "Hello from Step Functions!",
"AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id"
}
},
"Next": "Parallel"
},
"Parallel": {
"Type": "Parallel",
"Branches": [
{
"StartAt": "DeleteFunction",
"States": {
"DeleteFunction": {
"Type": "Task",
"End": true,
"Parameters": {
"FunctionName": "MyData"
},
"Resource": "arn:aws:states:::aws-sdk:lambda:deleteFunction"
}
}
},
{
"StartAt": "CopyObject",
"States": {
"CopyObject": {
"Type": "Task",
"End": true,
"Parameters": {
"Bucket": "MyData",
"CopySource": "MyData",
"Key": "MyData"
},
"Resource": "arn:aws:states:::aws-sdk:s3:copyObject"
}
}
}
],
"Next": "Success"
},
"Success": {
"Type": "Succeed"
},
"Glue StartJobRun": {
"Type": "Task",
"Resource": "arn:aws:states:::glue:startJobRun",
"Parameters": {
"JobName": "myJobName"
},
"Next": "Choice 2"
},
"Choice 2": {
"Type": "Choice",
"Choices": [
{
"Variable": "$",
"IsPresent": true,
"Next": "Fail"
}
],
"Default": "Wait"
},
"Wait": {
"Type": "Wait",
"Seconds": 5,
"Next": "Success"
},
"Fail": {
"Type": "Fail"
}
}
}
จากที่เห็น คำจำกัดความสามารถจัดการได้ด้วยโค้ด ดังนั้นถ้าเราใช้บริการควบคุมเวอร์ชัน เช่น GitHub และ CodeCommit เราสามารถสร้างไปป์ไลน์ CI/CD และปรับใช้โดยอัตโนมัติ จากตัวอย่างด้านล่างและนี้คือการสร้างไปป์ไลน์ CI/CD โดยใช้ CodeCommit, CodeBuild และ CodePipeline
กระบวนการที่กำหนดโดย AWS Step Functions เรียกว่า state machine ดังนั้น "การเรียกใช้ state machine" หมายถึงเริ่มกระบวนการที่กำหนดไว้ใน AWS Step Functions
นอกจากนี้ AWS Step Functions ยังมีสองประเภท ได้แก่ Standard และ Express โดยมีการใช้งานและคุณสมบัติหลักดังนี้
Standard:
- กรณีที่เราคาดหวังการดำเนินการหนึ่งครั้งจะใช้เวลามากกว่า 5 นาที
- อัตราการดำเนินการ 2,000/วินาที
- อัตราการเปลี่ยนสถานะ 4,000 ต่อวินาที
- ราคาต่อการเปลี่ยนแปลงของรัฐ
- ดูประวัติการดำเนินการและการแก้จุดบกพร่องด้วยภาพ
- รองรับการรวมบริการและรูปแบบทั้งหมด
- การประมวลผลแบบกลุ่มทั่วไป, ETL ฯลฯ
Express:
- กรณีที่เราคาดหวัง 100,000 สายต่อวินาทีสำหรับเวิร์กโฟลว์ภายใน 5 นาที
- อัตราการดำเนินการ 100,000/วินาที
- อัตราการเปลี่ยนสถานะเกือบไม่ จำกัด
- ราคาต่อจำนวนการดำเนินการและระยะเวลาในการดำเนินการ
- ส่งประวัติการดำเนินการไปยัง Amazon CloudWatch
- รองรับการรวมบริการและรูปแบบทั้งหมด
- microservice ฯลฯ
อีกทั้งเรายังสามารถใช้งานร่วมกันได้ระหว่าง Standard และ Express เพื่อเรียกดูเรียกสถานะของเครื่อง Express จากตัว Standard ได้ ถ้าเราต้องการเคลื่อนย้ายการตั้งค่าที่อยู่ในระบบ job management ไปยัง AWS Step functions โดนผมขอแนะนำให้ใช้เป็นตัว Standard ครับ
- What is AWS Step Functions?
- Standard vs. Express Workflows
- [บทความภาษาญี่ปุ่น][ Update ] Step Functions has added high performance low cost Express workflows!
ประโยชน์ของ AWS Step Functions
ฟังก์ชั่นที่จำเป็นสำหรับบริการดังกล่าวคืออะไร?
หากเรามีความต้องการที่จะจัดการกระบวนการหรือ workflow ต่างๆ ความสามารถเหล่านี้จะมีส่วนช่วยเราได้
- Synchronous execution
- Parallel execution
- Conditional branch
- loop
- stand-by
- retry
- Exception handling
- Check execution result
- Coordination between different workflows
AWS Step Functions สามารถใช้งานฟังก์ชันทั้งหมดที่ระบุไว้ด้านบนได้ ยิ่งไปกว่านั้น เนื่องจากเป็นเซิร์ฟเวอร์แบบ serverless จึงไม่มีความจำเป็นต้องจัดการเซิร์ฟเวอร์เหมือนระบบจัดการทั่วไป
น่าสนใจมากที่สามารถใช้ฟังก์ชันเหล่านี้ได้อย่างง่ายดายและทันที
สิ่งที่ AWS Step Functions ไม่สามารถทำได้
หลายคนอาจจะติดว่า AWS step function จะมาแทนที่ระบบ Job management หรือปล่าว ? อย่างไรก็ตาม AWS Step Functions ไม่ใช่ระบบการจัดการงาน ดังนั้นจึงไม่สามารถแทนที่ระบบ Job Wanagement ได้ เบื้องหลังการทำงานและการตรวจสอบก็จะรวมอยู่ในที่เดียวกัน
1.การดำเนินการจากส่วนกลางของ workflow
- หากกระบวนการล้มเหลวระหว่างกลาง จะไม่สามารถดำเนินการใหม่จากตรงกลางได้
- หากต้องการที่จะเริ่มกระบวนการใหม่ คุณจะต้องเริ่มต้นใหม่ตั้งแต่ต้น workflow
- ดังนั้นจึงจำเป็นต้องมีกระบวนการทำงานร่วมกันและการประมวลผลที่เทียบเท่ากัน จึงไม่สำคัญว่าจะมีการรันซ้ำหรือไม่
- ข้อมูลอ้างอิง: Implementation of equalities in serverless ( Batch processing and distributed transactionals )
2.การดำเนินการที่ยืดหยุ่นโดยยึดตามปฏิทิน
- AWS Step Functions เพียงอย่างเดียวจะไม่มีฟังก์ชันการตั้งเวลา
- หากคุณต้องการดำเนินการเป็นระยะ ให้ตั้งค่าในกฎ EventBridge
- การใช้งานกับ AWS Systems Manager เพื่อเปลี่ยน Calendar เพื่อควบคุม Cron และ Rate เช่นการการปรับตารางวันหยุดไม่จำกัด
- หากเป็นวันหยุดนักขัตฤกษ์ จะใช้งานฟังก์ชั่นได้ยาก เช่น เลื่อนเวลาดำเนินการเป็นวันที่ก่อนหรือหลังวันหยุด
- ข้อมูลอ้างอิง: [AWS Step Functions] ร่วมมือกับ AWS Systems Manager เปลี่ยนปฏิทินเพื่อจัดการกับกรณีที่ไม่ปกติของการดำเนินการตามปกติ | นักพัฒนาIO
สิ่งที่ AWS Step Functions สามารถทำได้
เหล่านี้คือประเภทของการประมวลผล = สถานะที่ AWS Step Functions สามารถทำได้ด้วย นี้คือรายชื่อประเภทของ State ที่สามารถตามได้
- Task
- Choice
- Wait
- Success
- Fail
- Parallel
- Map
Task
Task คือสถานะที่มีการทำงานแค่ส่วนเดียว
AWS API และกิจกรรมต่างๆ ที่สามารถตั้งค่าได้ซึ่งในขณะนี้สามารถเรียกใช้ API ได้มากกว่า 200 รายการแล้ว การควบคุมการทำงานของแอพพลิเคชันที่ปฏิบัติการอยู่ใน EC2 instance และ บน on-premises สามารถดูเนื้อหาได้ด้านล่างนี้
Choice
Choice คือสถานะที่ทำการแบ่งแยกออกเป็นหลายๆกลุ่มอย่างมีเงื่อนไข
เราสามารถกำหนดสถานะที่อยู่ภายในเงื่อนไขโดยสามารถเปรียบเทียบได้ดังนี้
- And
- BooleanEquals, BooleanEqualsPath
- IsBoolean
- IsNull
- IsNumeric
- IsPresent
- IsString
- IsTimestamp
- Not
- NumericEquals, NumericEqualsPath
- Numeric Greater Than, NumericGreaterThan Path
- NumericGreaterThanEquals, NumericGreaterThanEqualsPath
- NumericLessThan, NumericLessThanPath
- NumericLessThanEquals, NumericLessThanEqualsPath
- Or
- StringEquals, StringEqualsPath
- StringGreaterThan, StringGreaterThanPath
- StringGreaterThanEquals, StringGreaterThanEqualsPath
- StringLessThan, StringLessThanPath
- StringLessThanEquals, StringLessThanEqualsPath
- StringMatches
- TimestampEquals, TimestampEqualsPath
- TimestampGreaterThan, TimestampGreaterThanPath
- TimestampGreaterThanEquals,TimestampGreaterThanEqualsPath
- TimestampLessThan, TimestampLessThanPath
- TimestampLessThanEquals,TimestampLessThanEqualsPath
Wait
Wait คือสถานะรอโดยมีการกำหนดระยะเวลา
เราสามารถเลือกระหว่างเวลาที่เป็น (วินาที) และ เวลาในรูปแบบของ (timestamp) ได้ โดยรายการต่างๆ จะมีการระบุเวลาสัมพัทธ์หรือเวลาสัมบูรณ์และใช้การประมวลผลที่รอเวลาที่ระบุ
Success
Success คือสถานะสำหรับการ terminate แบบปกติ
คุณไม่จำเป็นต้องเพิ่มสถานะ Success ที่จุดสิ้นสุดของ workflow สถานะนี้ถูกใช้แค่เป็นจุดสิ้นสุดของการทำงาน โดยไม่ต้องทำอะไรเพิ่มเติมอย่างเช่นข้อมูลหรือผลลัพธ์ที่มีการแตกแขนงด้วยเงื่อนไขที่ต้องมีการเลือก
Fail
Fail คือสถานะที่เกิดจากความผิดปกติของการ terminate
ใช้งานเมื่อมีการ terminate และสถานะของเซิร์ฟเวอร์ที่ผิดปกติตามเงื่อนที่กำหนดโดย Choice
Parallel
Parallel คือสถานะที่ควบคุมการทำงานของ parallel
- AWS Step Functions: Parallel ถูกใช้งานเมื่อเรามีความต้องการที่จะรันคำสั่งที่มากกว่า 2 คำสั่งหรือมีกการทำงานอยู่ใน parallel
Map
Map คือสถานะที่มีการทำซ้ำในกระบวนการเดียวกันผ่าน array
จากตัวอย่างการใช้งานถ้าคุณต้องการจะ Stop EC2 instances แบบหลายตัว EC2:StopInstances
เราสามารถแสดงได้อย่างรัดกุมโดยผ่านอาร์เรย์ของ ID อินสแตนซ์ EC2 ไปยังแผนที่และกำหนด API ที่จะดำเนินการภายในแผนที่
How the state machine is executed
There are mainly the following methods of executing the state machine.
- management console
- EventBridge rules
- การเริ่มใช้งานสถานะของ Machine เป็นระยะโดยใช้ CloudWatch Events - AWS Step Functions
- การเริ่มต้นการดำเนินการสถานะของเครื่องเมื่อเหตุการณ์ Amazon S3 เกิดขึ้น - AWS Step Functions
- API Gateway
- APIs
- CLI
- SDKs
โดยส่วนมากเราจะมีการเรียกใช้สถานะของ Machine ผ่าน EventBridge rules ถ้าคุณต้องการจะใช้งาน API backend เราควรจะดำเนินการจาก API gateway
Value input/output
ถ้าเราต้องการจะเชื่อม values ระหว่างสถานะ เราสามารถใช้ Parameter ควบคุมสิ่งต่างๆได้
Parameters ที่ควบคุมมีทั้งหมดดังนี้
- InputPath
- กรองส่วนหนึ่งของอินพุตและส่งต่อไปยังรัฐ
- Output Path
- กรองส่วนของเอาต์พุตและส่งต่อไปยังสถานะถัดไป
- Result Path
- ผนวกอินพุตต้นฉบับเข้ากับเอาต์พุต
- Parameters
- ระบุอินพุตที่จะส่งไปยังรัฐ
- Result Selector
- แปลงผลลัพธ์เอาต์พุต
สำหรับการดำเนินการของ Parameters เหล่านี้สามารถศึกษาข้อมูลเพิ่มเติมได้จากบทความที่เขียนขึ้นจาก Developer.IO และ AWS ที่เผยแพร่อย่างเป็นทางการได้จากลิ้งค์ด้านล่างนี้ครับ
- [บทความภาษาญี่ปุ่น] Documents referenced to understand Step Functions input/output
- Input and Output Processing in Step Functions
Logging และ monitoring
วิธีการต่อไปนี้จะใช้เป็นหลักในการตรวจสอบผลการดำเนินการสถานะของ Machine
- ตรวจสอบบันทึกการดำเนินการของ Output แต่ละสถานะไปยัง CloudWatch Logs
- ตรวจสอบประวัติการดำเนินการจากคอนโซลการจัดการ
- ดูไทม์ไลน์การประมวลผลจาก X-Ray tracemap
- ตรวจสอบประวัติการดำเนินการ API จาก CloudTrail
เมื่อตรวจสอบจาก management console สถานะที่ประมวลผลสำเร็จจะเป็นสีเขียวตามที่แสดงรูปด้านล่าง
นอกจากนี้ ตัววัดการดำเนินการของ AWS Step Functions ยังสามารถรองรับการทำงานร่วมกับ CloudWatch ได้ด้วยโดยมี metrics ดังต่อไปนี้
metrics | explanation |
---|---|
ExecutionTime | บอกเป็นช่วงเวลา (เป็นมิลลิวินาที) ตั้งแต่เริ่มดำเนินการจนถึงสิ้นสุด |
Execution Throttled | จำนวนการปรับแต่ง StateEntered event และ จำนวนครั้งที่มีการ retry ได้ |
Executions Aborted | จำนวนครั้งที่มีการถูกรบกวนหรือถูก terminated |
Executions failed | จำนวนครั้งที่มีการดำเนินการล้มเหลว |
Executions Started | จำนวนครั้งที่ดำเนินการ |
Executions Succeeded | จำนวนครั้งที่ประสบความสำเร็จในการดำเนินการ |
Executions Timed Out | จำนวนครั้งที่การดำเนินการหมดอายุหรือถูกยกเลิกด้วยเหตุผลบางประการ |
AWS Step Functions: ราคา(Price)
ค่าบริการ AWS Step Functions จากวันที่ 3 มีนาคม ปี 2023 (Singapore region)
ในราคามาตรฐานจะมีค่าบริการดังนี้
- ฟรีการถ่ายโอน 4,000 ต่อเดือน (หลังจากหมด Free Tier 12 เดือน)
- $0.025 ต่อการเปลี่ยนสถานะ 1,000 ครั้ง
สำหรับราคาพิเศษระดับ :
- $1.00 ต่อ 1 ล้าน requests
- $0.000001 ต่อ 1 request
- การใช้งาน Memory ต่อระยะเวลา
- $0.00001667 per GB-Second เริ่มต้นที่ 1,000 ชั่วโมง GB-Hours ($0.0600 ต่อ GB-Second)
- $0.00000833 per GB-Sec หลังจาก 4,000 ชั่วโมง GB-Hours ($0.0300 per GB-Sec)
- $0.00000456 per GB-s และสูงขึ้นไปเป็น ($0.01642 per GB-s)
สรุปเกี่ยวกับ AWS Step Functions
เนื้อหาในบทความนี้แปลมาจากบล็อกของคุณ のんピ ครับผมสามารถเข้าไปดูบล็อกต้นฉบับและติดตามเนื้อหาเพิ่มเติมได้เลยครับ ขอบคุณครับ