0Pricing
Cloud & IT Cert Prep · บทเรียน

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-account

EventBridge ไปป์

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. EventBridge: บัสเหตุการณ์และกฎ
  2. Step Functions: การประสานกระบวนงานแบบไร้เซิร์ฟเวอร์
  3. Kinesis Data Streams สำหรับการประมวลผลเหตุการณ์แบบเรียลไทม์
  4. รูปแบบการประสานงานกับการควบคุมจากศูนย์กลาง
← กลับไปที่ Cloud & IT Cert Prep