EventBridge: บัสเหตุการณ์และกฎ
เผยแพร่เหตุการณ์ไปยังบัส EventBridge แบบกำหนดเอง เขียนกฎรูปแบบเหตุการณ์เพื่อกรองและกำหนดเส้นทางเหตุการณ์ไปยังเป้าหมาย Lambda, SQS หรือ Step Functions
EventBridge: บัสเหตุการณ์และกฎ เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
Amazon EventBridge คืออะไร
Amazon EventBridge (เดิมคือ CloudWatch Events) คือบัสเหตุการณ์แบบไร้เซิร์ฟเวอร์ที่ช่วยให้เชื่อมต่อแอปพลิเคชันได้ง่าย โดยใช้เหตุการณ์จากบริการของ AWS แอปพลิเคชันของคุณเอง และผู้ให้บริการ SaaS เหตุการณ์เป็นออบเจ็กต์ JSON ส่วน EventBridge จะกำหนดเส้นทางไปยังเป้าหมายอย่างน้อยหนึ่งรายการตาม กฎรูปแบบเหตุการณ์ ซึ่งแตกต่างจาก SQS ที่เป็นการสื่อสารแบบจุดต่อจุด EventBridge เป็น ชั้นกำหนดเส้นทางแบบเผยแพร่/สมัครรับ เหตุการณ์หนึ่งรายการจึงกระจายไปยังเป้าหมายหลายรายการได้พร้อมกัน
บัสเหตุการณ์: Default, กำหนดเอง และพาร์ทเนอร์
EventBridge มีบัสเหตุการณ์สามประเภท บัส Default รับเหตุการณ์จากบริการของ AWS (การเปลี่ยนแปลงสถานะของ EC2 เหตุการณ์จาก S3 การเรียกใช้ API ของ CloudTrail เป็นต้น) บัสกำหนดเอง คือบัสที่คุณสร้างขึ้นสำหรับเหตุการณ์จากแอปพลิเคชันของคุณเอง ซึ่งช่วยแยกเหตุการณ์ของแอปพลิเคชันออกจากเหตุการณ์ของบริการ AWS บัสพาร์ทเนอร์ รับเหตุการณ์โดยตรงจากผู้ให้บริการ SaaS (Zendesk, Datadog, GitHub, Shopify) ผ่านการผสานรวมที่สร้างไว้ล่วงหน้า จึงไม่จำเป็นต้องมี Lambda สำหรับการเรียกตรวจสอบเป็นระยะ
# Create a custom event bus for your application
aws events create-event-bus --name my-app-bus
# Put a custom event onto the bus
aws events put-events --entries '[{
"Source": "com.myapp.orders",
"DetailType": "OrderPlaced",
"Detail": "{\"orderId\": \"ORD-123\", \"total\": 99.99}",
"EventBusName": "my-app-bus"
}]'กฎรูปแบบเหตุการณ์
กฎรูปแบบเหตุการณ์กำหนดว่าจะจับคู่เหตุการณ์ใด โดยใช้รูปแบบ JSON ที่กรองจากฟิลด์เหตุการณ์หลายรายการร่วมกันได้ (แหล่งที่มา ประเภทโดยละเอียด account ภูมิภาค หรือฟิลด์ภายในออบเจ็กต์ detail) EventBridge จะประเมินทุกเหตุการณ์กับกฎทั้งหมดบนบัส เหตุการณ์ที่ตรงกันจะถูกส่งต่อไปยังเป้าหมายที่กำหนดค่าไว้สำหรับกฎนั้น กฎใช้ตรรกะ OR ในระดับกฎ และใช้ตรรกะ AND ภายในออบเจ็กต์รูปแบบ
# Create a rule that matches EC2 instance state changes to 'stopped'
aws events put-rule \
--name ec2-stopped-alert \
--event-bus-name default \
--event-pattern '{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["stopped"]
}
}' \
--state ENABLEDการกำหนดค่าเป้าหมาย
EventBridge สามารถกำหนดเส้นทางเหตุการณ์ที่ตรงกันไปยังเป้าหมายได้มากกว่า 20 ประเภท รวมถึง ฟังก์ชัน Lambda คิว SQS หัวข้อ SNS เครื่องจักรสถานะของ Step Functions สตรีมข้อมูล Kinesis ปลายทาง API Gateway งาน ECS และแม้แต่บัส EventBridge อื่น (สำหรับการกำหนดเส้นทางข้ามบัญชี) แต่ละกฎมีเป้าหมายได้สูงสุด 5 รายการ EventBridge เรียกใช้เป้าหมายแบบอะซิงโครนัส และจะลองใหม่โดยเพิ่มช่วงเวลารอแบบทวีคูณเมื่อเกิดความล้มเหลว
# Add an SNS topic and Lambda function as targets for the rule
aws events put-targets \
--rule ec2-stopped-alert \
--event-bus-name default \
--targets '[{
"Id": "notify-ops",
"Arn": "arn:aws:sns:us-east-1:123456789012:ops-alerts"
}, {
"Id": "auto-remediate",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:RestartEC2"
}]'การแปลง Input
โดยค่าเริ่มต้น EventBridge จะส่ง JSON ของเหตุการณ์ทั้งหมดไปยังเป้าหมาย ใช้ การแปลง Input เพื่อปรับรูปแบบเหตุการณ์ก่อนส่งมอบ โดยดึงฟิลด์เฉพาะ สร้างออบเจ็กต์ JSON ใหม่ หรือสร้างสตริงแบบกำหนดเอง วิธีนี้มีประโยชน์เมื่อฟังก์ชัน Lambda หรือปลายทาง API ต้องการโครงสร้างข้อมูลเฉพาะ แทนที่จะรับซองเหตุการณ์ทั้งหมดของ EventBridge จึงไม่ต้องใช้ Lambda ส่งผ่านเพียงเพื่อปรับรูปแบบข้อมูล
# Input transformer: extract orderId and total from detail
# InputPathsMap extracts values by JSON path
{
'InputPathsMap': {
'orderId': '$.detail.orderId',
'total': '$.detail.total'
},
'InputTemplate': '{
"message": "New order <orderId> for $<total>",
"channel": "ops"
}'
}กฎตามกำหนดเวลา (Cron/Rate)
กฎของ EventBridge ยังทำงานตาม กำหนดเวลาได้ แทนที่จะจับคู่กับเหตุการณ์ ใช้ นิพจน์ rate (เช่น rate(5 minutes)) สำหรับตัวกระตุ้นตามช่วงเวลาคงที่ หรือใช้ นิพจน์ cron สำหรับกำหนดเวลาตามปฏิทิน กฎตามกำหนดเวลาเหมาะอย่างยิ่งสำหรับเรียกใช้ฟังก์ชัน Lambda เพื่อทำงานล้างข้อมูลแบบกลุ่ม ส่งรายงานเป็นระยะ หรือเรียกใช้งาน DMS ในแต่ละคืน ซึ่งช่วยทดแทนงาน cron ที่ทำงานบน EC2
# Create a scheduled rule that fires every day at midnight UTC
aws events put-rule \
--name nightly-cleanup \
--schedule-expression 'cron(0 0 * * ? *)' \
--state ENABLED
aws events put-targets \
--rule nightly-cleanup \
--targets '[{
"Id": "cleanup-lambda",
"Arn": "arn:aws:lambda:us-east-1:123456789012:function:NightlyCleanup"
}]'คลังเก็บและเล่นเหตุการณ์ซ้ำของ EventBridge
EventBridge สามารถ เก็บถาวรเหตุการณ์ทั้งหมดหรือเฉพาะส่วนที่กรองแล้วจากบัสไปยังคลังเก็บเหตุการณ์ และเก็บรักษาไว้ตามระยะเวลาที่กำหนดค่าได้ จากนั้นคุณสามารถ เล่นซ้ำเหตุการณ์ที่เก็บถาวรกลับไปยังบัสได้ทุกเมื่อ ซึ่งมีประโยชน์สำหรับการเล่นเหตุการณ์ซ้ำเพื่อทดสอบ Lambda เวอร์ชันใหม่ กู้คืนจากข้อบกพร่องที่ทำให้เป้าหมายพลาดเหตุการณ์ หรือเติมข้อมูลย้อนหลังให้บริการใหม่ด้วยเหตุการณ์ในอดีต นี่คือกลไกป้องกันความเสียหายด้านการปฏิบัติงานที่มีประสิทธิภาพและเป็นจุดเด่นเฉพาะของ EventBridge เมื่อเทียบกับระบบเผยแพร่/สมัครรับอื่น
# Create an event archive for the custom bus
aws events create-archive \
--archive-name my-app-archive \
--event-source-arn arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus \
--retention-days 30
# Replay archived events from a specific time window
aws events start-replay \
--replay-name replay-missed-orders \
--event-source-arn arn:aws:events:us-east-1:123456789012:archive/my-app-archive \
--event-start-time 2024-01-10T00:00:00Z \
--event-end-time 2024-01-10T06:00:00Z \
--destination '{"Arn": "arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus"}'การกำหนดเส้นทางข้ามบัญชีและข้ามภูมิภาค
EventBridge รองรับ การกำหนดเส้นทางเหตุการณ์ข้ามบัญชี โดยสร้างนโยบายตามทรัพยากรบนบัสเป้าหมายในอีกบัญชีหนึ่ง เพื่ออนุญาตให้บัญชีต้นทางส่งเหตุการณ์ได้ วิธีนี้ช่วยให้บัญชีตรวจสอบส่วนกลางรับเหตุการณ์จากบัญชีเวิร์กโหลดทั้งหมดได้ หรือสร้างสถาปัตยกรรมบัสบริการที่ใช้ร่วมกัน ซึ่งทีมแพลตฟอร์มกำหนดเส้นทางเหตุการณ์ไปยังบัสของทีมผู้ใช้บริการ การกำหนดเส้นทางข้ามภูมิภาคทำงานในลักษณะเดียวกัน โดยใช้เป้าหมายบัสเหตุการณ์ข้ามภูมิภาคที่ระบุไว้อย่างชัดเจน
# Allow a source account (111111111111) to send events to this bus
aws events put-permission \
--event-bus-name my-central-bus \
--action events:PutEvents \
--principal 111111111111 \
--statement-id allow-source-accountEventBridge ไปป์
EventBridge ไปป์สร้างการผสานรวมแบบจุดต่อจุดระหว่าง แหล่งที่มา (SQS, Kinesis, DynamoDB Streams, Kafka) กับ เป้าหมาย โดยมีการกรองและเพิ่มข้อมูลระหว่างทางได้ตามต้องการ (ผ่าน Lambda, Step Functions หรือ API Gateway) ไปป์เรียบง่ายกว่าการเขียน Lambda สำหรับผู้ใช้บริการที่เรียกตรวจสอบเป็นระยะ เพราะจัดการการเรียกตรวจสอบ การรวมเป็นชุด การกรอง และการกำหนดเส้นทางให้โดยอัตโนมัติ ใช้ไปป์เมื่อต้องการการเชื่อมต่อโดยตรงจากแหล่งที่มาไปยังเป้าหมาย โดยไม่ต้องมีบัสเผยแพร่/สมัครรับเต็มรูปแบบ
# Create an EventBridge Pipe from SQS to Lambda
aws pipes create-pipe \
--name sqs-to-processor \
--source arn:aws:sqs:us-east-1:123456789012:incoming-orders \
--target arn:aws:lambda:us-east-1:123456789012:function:ProcessOrder \
--role-arn arn:aws:iam::123456789012:role/PipeRole \
--source-parameters '{
"SqsQueueParameters": {"BatchSize": 10}
}' \
--filter-criteria '{
"Filters": [{"Pattern": "{\"body\": {\"orderType\": [\"PRIORITY\"]}}"}]
}'EventBridge เทียบกับ SNS และ SQS
บริการทั้งสามมีความสามารถทับซ้อนกันบางส่วน แต่เหมาะกับกรณีใช้งานต่างกัน SNS: กระจายข้อมูลแบบพุชไปยังผู้สมัครรับ (อีเมล, HTTP, SQS, Lambda) เป็นการเผยแพร่/สมัครรับที่เรียบง่ายและไม่มีการกรอง SQS: คิวข้อความที่ทนทานสำหรับการแยกการทำงานแบบจุดต่อจุด โดยผู้ใช้บริการเป็นฝ่ายดึงข้อความ EventBridge: บัสกำหนดเส้นทางตามเนื้อหา พร้อมทะเบียนสคีมา การเก็บถาวร/เล่นซ้ำ พาร์ทเนอร์ SaaS และการส่งข้ามบัญชี เหมาะที่สุดสำหรับการกำหนดเส้นทางเหตุการณ์ที่ซับซ้อนระหว่างบริการจำนวนมาก ใช้ EventBridge เมื่อต้องการกฎการกำหนดเส้นทางที่ซับซ้อน ไม่ใช่เพียงการกระจายข้อมูลแบบง่าย
ทะเบียนสคีมาของ EventBridge
ทะเบียนสคีมาของ EventBridgeจะตรวจจับและจัดหมวดหมู่โครงสร้างของเหตุการณ์ที่ไหลผ่านบัสเหตุการณ์โดยอัตโนมัติ ระบบจัดเก็บสคีมาในรูปแบบ OpenAPI 3.0 เพื่อให้นักพัฒนาค้นพบเหตุการณ์ที่พร้อมใช้งาน และสร้างการเชื่อมโยงโค้ด (Java, Python, TypeScript) ที่แปลงเหตุการณ์จากรูปแบบอนุกรมเป็นออบเจ็กต์ที่มีชนิดข้อมูลได้ ฟังก์ชันนี้ช่วยขจัดโค้ดสำหรับแยกวิเคราะห์ JSON แบบเขียนเอง และรับรองความปลอดภัยด้านชนิดข้อมูลระหว่างบริการที่ขับเคลื่อนด้วยเหตุการณ์ นอกจากนี้คุณยังลงทะเบียนสคีมาเหตุการณ์แบบกำหนดเองสำหรับเหตุการณ์ที่สร้างโดยแอปพลิเคชันของคุณเองได้ด้วย
# Enable schema discovery on a custom event bus
aws schemas create-discoverer \
--source-arn arn:aws:events:us-east-1:123456789012:event-bus/my-app-bus \
--description 'Auto-discover schemas from app bus'
# List discovered schemas
aws schemas list-schemas \
--registry-name discovered-schemasตรวจสอบความเข้าใจ
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า EventBridge กำหนดเส้นทางเหตุการณ์ไปยังเป้าหมายหลายรายการพร้อมกันโดยใช้กฎรูปแบบตามเนื้อหา การเก็บถาวรและการเล่นซ้ำช่วยให้เก็บรักษาและประมวลผลเหตุการณ์ในอดีตใหม่ได้โดยไม่ต้องเปลี่ยนแปลงโค้ด และ EventBridge ไปป์มอบไปป์ไลน์ที่จัดการโดยบริการจากแหล่งที่มาไปยังเป้าหมายสำหรับแหล่งข้อมูลแบบสตรีม ต่อไป เราจะสำรวจ Step Functions สำหรับควบคุมเวิร์กโฟลว์แบบไร้เซิร์ฟเวอร์หลายขั้นตอน
คำถามที่พบบ่อย
บทเรียน “EventBridge: บัสเหตุการณ์และกฎ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “EventBridge: บัสเหตุการณ์และกฎ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “EventBridge: บัสเหตุการณ์และกฎ”
เผยแพร่เหตุการณ์ไปยังบัส EventBridge แบบกำหนดเอง เขียนกฎรูปแบบเหตุการณ์เพื่อกรองและกำหนดเส้นทางเหตุการณ์ไปยังเป้าหมาย Lambda, SQS หรือ Step Functions คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “EventBridge: บัสเหตุการณ์และกฎ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม
ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- EventBridge: บัสเหตุการณ์และกฎ
- Step Functions: การประสานกระบวนงานแบบไร้เซิร์ฟเวอร์
- Kinesis Data Streams สำหรับการประมวลผลเหตุการณ์แบบเรียลไทม์
- รูปแบบการประสานงานกับการควบคุมจากศูนย์กลาง