Introduction
AWS Step Functions
AWS Step Functions là một dịch vụ orchestration serverless, giúp bạn thiết kế và chạy các quy trình (workflow) gồm nhiều bước (step) theo thứ tự hoặc điều kiện bạn mong muốn. Thay vì viết toàn bộ logic xử lý phức tạp trong một Lambda Function, bạn có thể chia nhỏ thành nhiều bước rõ ràng và kết nối chúng bằng State Machine.
State Machine
State Machine trong AWS Step Functions là bản thiết kế workflow mô tả quy trình xử lý gồm nhiều states và quan hệ giữa chúng. Nói dễ hiểu, nó giống như sơ đồ luồng công việc: bạn chỉ cần định nghĩa các bước, điều kiện rẽ nhánh, xử lý lỗi và cách kết thúc. Khi chạy, Step Functions sẽ tự động thực thi đúng thứ tự và logic bạn đã thiết kế.

State Machine được định nghĩa bằng Amazon States Language (ASL) – một định dạng JSON, với các state (trạng thái) chính:
- Task: Gọi Lambda function hoặc aws services. Đây là state cốt lõi để xử lý logic chính.
- Choice: Rẽ nhánh theo điều kiện (if/else). So sánh giá trị và điều hướng luồng phù hợp, ví dụ: Nếu kết quả là OK thì làm tiếp, nếu NG thì dừng.
- Parallel: Chạy song song các nhánh. Khi các bước xử lý không phụ thuộc nhau, có thể chạy đồng thời để tăng tốc.
- Map: Xử lý lặp theo danh sách, áp dụng cùng quy trình cho từng phần tử. Dùng cho xử lý batch, ví dụ resize nhiều ảnh, quét nhiều record.
- Wait: Tạm dừng workflow một khoảng thời gian hoặc đến một thời điểm cụ thể. Giúp delay giữa các bước, chờ hệ thống khác trả kết quả.
- Pass: Chuyển dữ liệu từ bước này sang bước khác không làm gì cả hoặc gán giá trị mới. Dùng để test luồng, gán giá trị tạm thời.
- Succeed: Kết thúc workflow thành công.
- Fail: Kết thúc workflow thất bại. Khi workflow gặp lỗi nghiêm trọng, không thể tiếp tục.
Benefits
- Dễ quản lý các luồng xử lý phức tạp: Chia nhỏ logic thành các bước rõ ràng, dễ bảo trì.
- Tự động xử lý lỗi (retry, timeout): Thiết lập retry, timeout, fallback mà không cần viết code phức tạp.
- Có giao diện trực quan: Thiết kế và quan sát workflow bằng sơ đồ (diagram), dễ hiểu quan hệ giữa các bước.
- Quản lý hệ thống phân tán: Dễ dàng kết hợp nhiều thành phần khác nhau thành một quy trình end-to-end, quản lý tập trung.
- Hỗ trợ chạy bất đồng bộ & batch: Phù hợp cho xử lý dữ liệu lớn hoặc công việc lặp lại theo lịch.
- Tích hợp mạnh mẽ với AWS services: Kết nối trực tiếp hơn 220 AWS services qua AWS SDK integrations và 10,000+ API actions, phục vụ đa dạng use case: ML, ETL, IoT...
- Giám sát & logging dễ dàng: Tích hợp EventBridge để theo dõi, log chi tiết, và gửi thông báo khi có thay đổi trạng thái.
- Hiển thị trạng thái workflow real-time: Các trạng thái chạy (thành công, thất bại, đang xử lý) được hiển thị rõ ràng, dễ theo dõi tiến trình.

Use cases
Với AWS Step Functions, bạn có thể xây dựng các workflow quản lý trạng thái theo thời gian, đưa ra quyết định dựa trên dữ liệu đầu vào và xử lý lỗi cũng như ngoại lệ - với các use cases sau:
Lab Introduction
- AWS experience: Intermediate
- Time to complete: 30 minutes
- AWS Region: US East (N. Virginia) us-east-1
- Services used: Step Functions, Lambda, SNS
Architecture

AWS có sẵn template cho bài lab này – chỉ cần “Create from template” là có ngay workflow mẫu.
https://docs.aws.amazon.com/step-functions/latest/dg/sample-lambda-orchestration.html
📌Nhưng thay vì đi đường tắt, mình chọn cách "get our hands dirty": tự tay build từng bước để hiểu rõ cách Step Functions hoạt động, từ định nghĩa state, gọi Lambda cho đến publish qua SNS. Vì vậy nếu muốn tự tin làm chủ workflow, thì cùng mình bắt đầu từ con số 0 nhé!
Trong bài lab này, chúng ta sẽ từng bước xây dựng một State Machine mô phỏng quy trình giao dịch cổ phiếu (Stock Trading Workflow):
- Đầu tiên, bạn sẽ tạo một Lambda Function để kiểm tra giá cổ phiếu (giả lập giá bằng cách random số). Sau đó, workflow sẽ tạo ra khuyến nghị mua/bán.
- Tiếp theo, bạn sẽ thiết kế một Choice State để quyết định nên thực hiện mua hay bán cổ phiếu, dựa trên dữ liệu đã phê duyệt.
- Cuối cùng, kết quả giao dịch sẽ được gửi đi thông qua SNS Topic, nhằm thông báo rằng quá trình đã hoàn tất.
Task Details
- Create 3 Lambda functions:
- Check stock price
- Buy stock
- Sell stock
- Create SNS topic for reporting result
- Create Step Functions
- State machine
- Workflow Definition
- Confirm role creation
- Run the workflow
- Start execution
- Review the execution details
- Verify SNS notification
- Clean up
1. Create 3 Lambda functions
1.1 Check stock price function
- Author from scratch
- Basic information
- Function name:
d-lambda-stock-trading-checkprice
- Runtime:
Python 3.13
- Architecture:
x86_64
- Execution role:
Create a new role with basic Lambda permissions
- Create function

Nội dung code: tạo ngẫu nhiên một số nguyên từ 0 đến 99 để giả lập giá cổ phiếu
import math
import random
"""
Sample Lambda function which mocks checking the price of a stock.
For demonstration purposes, this function simply generates a random integer and
returns this number as the stock price.
"""
def lambda_handler(event, context):
# simulate a stock price with a random number
price = getRandomInt(0, 100)
print(f"Stock price is: {price}")
return {"stock_price": price}
# generate a random int between 2 values
def getRandomInt(min, max):
min = math.ceil(min)
max = math.floor(max)
return math.floor(random.random() * (max - min) + min)
1.2 Buy stock function
- Author from scratch
- Basic information
- Function name:
d-lambda-stock-trading-buy
- Runtime:
Python 3.13
- Architecture:
x86_64
- Execution role:
Create a new role with basic Lambda permissions
- Create function

Nội dung code: giả lập lệnh mua cổ phiếu. Dựa trên giá truyền vào, hệ thống sinh ra thông tin giao dịch bao gồm ID, số lượng cổ phiếu, thời gian và loại giao dịch là "buy"
. Logic được giữ đơn giản để dễ test workflow.
import json
import datetime
import math
import random
import uuid
"""
Sample Lambda function simulates buying a random number of shares of a stock.
For demonstration purposes, this function does not actually perform any transactions but simulates returning transaction details.
"""
def lambda_handler(event, context):
_price = event["stock_price"]
print(f"Buying for ${_price}")
_now = datetime.datetime.now()
transaction_result = {
"price": _price,
"transaction_id": str(uuid.uuid1),
"type": "buy",
"qty": getRandomInt(1, 100),
"timestamp": str(_now),
}
return transaction_result
# generate a random int between 2 values
def getRandomInt(min, max):
min = math.ceil(min)
max = math.floor(max)
return math.floor(random.random() * (max - min) + min)
1.3 Sell stock function
- Author from scratch
- Basic information
- Function name:
d-lambda-stock-trading-sell
- Runtime:
Python 3.13
- Architecture:
x86_64
- Execution role:
Create a new role with basic Lambda permissions
- Create function

Nội dung code: giả lập lệnh bán cổ phiếu. Dựa trên giá truyền vào, hệ thống sinh ra thông tin giao dịch bao gồm ID, số lượng cổ phiếu, thời gian và loại giao dịch là "sell"
. Logic được giữ đơn giản để dễ test workflow.
import json
import datetime
import math
import random
import uuid
"""
Sample Lambda function simulates selling a random number of shares of a stock.
For demonstration purposes, this function does not actually perform any transactions but simulates returning transaction details.
"""
def lambda_handler(event, context):
_price = event["stock_price"]
print(f"Selling for ${_price}")
_now = datetime.datetime.now()
transaction_result = {
"transaction_id": str(uuid.uuid1),
"price": _price,
"type": "sell",
"qty": getRandomInt(1, 100),
"timestamp": str(_now),
}
return transaction_result
# generate a random int between 2 values
def getRandomInt(min, max):
min = math.ceil(min)
max = math.floor(max)
return math.floor(random.random() * (max - min) + min)
2. Create SNS topic for reporting result
2.1 Creating SNS Topic
Vào Console của SNS → Click Topic → Create topic
- Type:
Standard
- Name:
d-sns-report-result-topic
- Display name - optional:
reporting stock trading result
- Tags - optional:
- Key:
Name
- Value:
d-sns-report-result-topic
- Các thuộc tính khác để như default
Kết quả:

2.2 Subscribing to the topic
Vào Console SNS → Topic → Click vào topic vừa tạo (d-sns-report-result-topic
) → Create subscription:
Subscribe Email to SNS topic

Sau khi hoàn thành thì trạng thái của subscription như bên dưới. Endpoint email đang Pending confirmation
.

Bạn sẽ nhận 1 email confirming your subscription to your email. Trường hợp không có trong Inbox, bạn kiểm tra trong mục Spam.

Hoàn tất

3. Create Step Functions
3.1 State machine
Vào Step Functions Console → State machines → Create state machine
State machine details:
- Create from blank
- State machine name:
d-sfn-stock-trading-state-machine
- State machine type:
Standard

3.2 Workflow Definition
Workflow Definition
{
"Comment": "stock trading demo state machine",
"QueryLanguage": "JSONata",
"StartAt": "Check Stock Price",
"States": {
"Check Stock Price": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Arguments": {
"FunctionName": "arn:aws:lambda:us-east-1:xxxxxxxxx:function:d-lambda-stock-trading-checkprice:$LATEST",
"Payload": "{% $states.input %}"
},
"Assign": {
"recommended_type": "{% $states.result.Payload.stock_price > 50 ? 'sell' : 'buy' %}",
"stock_price": "{% $states.result.Payload.stock_price %}"
},
"Next": "Buy or Sell?"
},
"Buy or Sell?": {
"Type": "Choice",
"Choices": [
{
"Condition": "{% $recommended_type = 'buy' %}",
"Next": "Buy Stock"
},
{
"Condition": "{% $recommended_type = 'sell' %}",
"Next": "Sell Stock"
}
]
},
"Buy Stock": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Arguments": {
"FunctionName": "arn:aws:lambda:us-east-1:xxxxxxxxx:function:d-lambda-stock-trading-buy:$LATEST",
"Payload": {
"recommended_type": "{% $recommended_type %}",
"stock_price": "{% $stock_price %}"
}
},
"Next": "Report Result"
},
"Sell Stock": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Arguments": {
"FunctionName": "arn:aws:lambda:us-east-1:xxxxxxxxx:function:d-lambda-stock-trading-sell:$LATEST",
"Payload": {
"recommended_type": "{% $recommended_type %}",
"stock_price": "{% $stock_price %}"
}
},
"Next": "Report Result"
},
"Report Result": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Arguments": {
"TopicArn": "arn:aws:sns:us-east-1:xxxxxxxxx:d-sns-report-result-topic",
"Message": "{% $states.input %}"
},
"End": true
}
}
}
Workflow Description sẽ gồm 4 States như sau:
- 1. Check Stock Price
- Thực hiện: Gọi Lambda
d-lambda-stock-trading-checkprice
để lấy giá cổ phiếu hiện tại. - Nếu giá trên 50, hệ thống đề xuất bán; nếu 50 trở xuống, đề xuất mua.
- Hệ thống lưu lại:
- stock_price: giá cổ phiếu
- recommended_type: "buy" hoặc "sell" tùy theo giá
- 2. Buy or Sell? (Choice State)
- Logic phân nhánh:
- Nếu
recommended_type = "buy"
→ chuyển sang bước Buy Stock - Nếu
recommended_type = "sell"
→ chuyển sang bước Sell Stock
- 3. Buy Stock / Sell Stock
- Buy Stock
- Gọi Lambda
d-lambda-stock-trading-buy
- Gửi vào payload gồm
recommended_type
và stock_price
- Sell Stock
- Gọi Lambda
d-lambda-stock-trading-sell
- Gửi vào payload gồm
recommended_type
và stock_price
- 4. Report Result (SNS Publish)
- Thực hiện: Gửi thông báo đến SNS topic
d-sns-report-result-topic
- Nội dung: Là toàn bộ
$states.input
ban đầu của execution, bao gồm cả kết quả tính toán
Create Workflow Definition
Bạn có 2 cách để tạo Workflow Definition trong Step Functions:
- Console – Kéo thả trực quan bằng giao diện.
- JSON – Viết bằng Amazon States Language (ASL) → mình sẽ dùng cách này.
- tại tab Code: Copy nội dung JSON và thay thế các giá trị sau:
- Line 10: Thay bằng
checkprice Function ARN:$LATEST
của bạn - Line 36: Thay bằng
stock buy Function ARN:$LATEST
của bạn - Line 48: Thay bằng
stock sell Function ARN:$LATEST
của bạn - Line 60: Thay bằng
SNS TopicArn
của bạn
Sau khi settting xong Workflow Definition → Chọn Create

3.3 Confirm role creation
Step Function sẽ tự động tạo một execution role với các quyền truy cập đến các resources cần thiết trong Workflow đã định nghĩa (như Lambda, SNS,v.v). Mình chỉ cần nhấn Confirm là xong.

Hoàn tất

4. Run the workflow
4.1 Start execution
Tại Step Functions Console → State machines → d-sfn-stock-trading-state-machine
→ Start execution
- Name:
trading001
- Input - optional: có thể để trống
- Chọn Start execution

Execution đã chạy thành công!

4.2 Review the execution details

- Luồng thực thi đã chạy các step sau (Graph view)
- Check Stock Price (
checkprice
Lambda ): Gọi Lambda lấy giá chứng khoán hiện tại. "stock_price": 19 ≤ 50 nên recommended_type sẽ là buy - Choice State - Buy or Sell? Dựa vào kết quả
recommendation
, nhánh buy
sẽ được chọn. - Buy Stock (
stock buy
Lambda ): hệ thống thực hiện lệnh mua. - Report Result (SNS Publish): Sau khi mua xong, kết quả được gửi tới SNS topic để thông báo.
Cũng có thể review ở Table view mode để xem danh sách các states theo tên, loại, trạng thái, v.v

4.3 Verify SNS notification
Sau khi Step Function thực thi hoàn tất, một email được gửi đến địa chỉ đã đăng ký từ SNS topic, với nội dung chi tiết như sau:
- stock_price: Giá cổ phiếu hiện tại là 19
- type: Hệ thống đã quyết định "buy" (mua vào)
- qty: Số lượng cổ phiếu được mua là 75

5. Clean up
- Delete State machine
- Delete State machine role
- Delete SNS topic
- Delete Lambda functions
- Delete CloudWatch logs
Challenge
Bây giờ bạn đã hiểu cách thiết kế một workflow tự động hóa giao dịch cổ phiếu bằng Step Functions, hãy "level up" với những thử thách thực chiến sau nhé:
- Upgrade Lambda kiểm tra real-time stock price: Thay vì random giá, hãy thử gọi API thực tế như Yahoo Finance, Alpha Vantage... để mô phỏng giao dịch thực tế hơn.
- Tích hợp DynamoDB để lưu lịch sử giao dịch: Thay vì chỉ gửi kết quả qua SNS, hãy lưu kết quả mua/bán vào DynamoDB. Sau này bạn có thể dễ dàng hiển thị lịch sử giao dịch, phân tích thống kê hoặc truy vết lỗi.
- Thêm retry & fallback xử lý lỗi thông minh: Thêm cấu hình
Retry
, Catch
cho từng Task (ví dụ: Lambda mua/bán thất bại) để tăng độ tin cậy. Có thể thêm một bước gửi thông báo lỗi qua SNS nếu tất cả retries đều fail.
- Bảo vệ workflow với API Gateway + Cognito: Tạo một API Gateway trước Step Functions để kiểm soát quyền truy cập. Kết hợp với Cognito hoặc Lambda Authorizer để tăng cường bảo mật.
Tổng Kết
Qua bài lab này, chúng ta đã từng bước build một workflow giao dịch cổ phiếu tự động bằng AWS Step Functions:
- Tạo các Lambda function để giả lập kiểm tra giá, mua và bán cổ phiếu.
- Thiết kế State Machine gồm các bước xử lý tuần tự và phân nhánh logic
"buy"
hoặc "sell"
dựa trên giá cổ phiếu. - Tích hợp SNS để gửi kết quả giao dịch qua email – mô phỏng hệ thống thông báo giao dịch như ngoài đời thực.
- Kiểm tra thực tế bằng cách thực thi workflow và theo dõi kết quả qua cả console và email.
Kết luận:
AWS Step Functions chính là “nhạc trưởng tài tình” trong dàn nhạc serverless – là công cụ mạnh mẽ giúp bạn xây dựng các workflow có khả năng duy trì trạng thái theo thời gian, ra quyết định dựa trên dữ liệu, và xử lý lỗi một cách mượt mà.
Từ đây, bạn hoàn toàn có thể mở rộng để xây dựng các hệ thống automation thực thụ trong nhiều lĩnh vực:
- Data processing – xử lý dữ liệu theo luồng hoặc theo lịch trình
- Machine learning – tự động hóa training, prediction và đánh giá mô hình
- Microservice orchestration – điều phối dịch vụ trong các hệ thống phân tán
- IT and security automation – tự động hóa các tác vụ vận hành, bảo mật
Tài liệu Tham khảo