[ฟีเจอร์ใหม่]เปิดตัว Amazon EventBridge Scheduler ที่สามารถ schedule โดยระบุ Timezone ได้

นี่เป็นบทความแปล ที่มีเนื้อหามาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「[新機能] タイムゾーン指定でスケジュール起動できるAmazon EventBridge Schedulerがリリースされました」หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ทางด้านล่าง เนื้อหาในบทความนี้การอธิบายบางอย่างจะถูกปรับให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

สวัสดีครับ LIGHT จากบริษัท Classmethod (Thailand) ครับ

ครั้งนี้อยากจะมาแนะนำให้ทุกคนได้รู้จักกับฟีเจอร์ใหม่ของ EventBridge ที่มีชื่อว่า Amazon EventBridge Scheduler กันครับ

ข้อมูลโดยรวม EventBridge Scheduler

  • สามารถระบุ Timezone เพื่อเรียกใช้งาน task เป็นประจำหรือครั้งเดียวได้

  • ไม่ใช่แค่ทำงานตามเวลาที่กำหนดไว้แต่ยังสามารถทำงานได้ในช่วงกรอบเวลาที่กำหนดไว้ได้อีกด้วย
    (อย่างเช่น Image ของ maintenance windows ใน RDS เป็นต้น)

  • รองรับการเป็น Target สำหรับบริการ AWS กว่า 270 รายการ รวมถึงยังสามารถเรียกใช้คำสั่งที่ rule ของ EventBridge ไม่สามารถเรียกใช้โดยตรงได้

  • เป็นคนละบริการกับ " EventBridge Rules"

ความแตกต่างจาก EventBridge rules

ดังที่ได้กล่าวไว้ทางด้านบนว่าบริการนี้เป็นคนละบริการกับ EventBridge rules ซึ่งมีความแตกต่างในการทำงานหลายส่วน โดยจะใช้งานต่างกันตามลักษณะการใช้งาน และในบล็อกนี้ AWS Blog ทาง AWS ได้มีการสรุปความแตกต่างของฟังก์ชันเอาไว้เลยลองรวบรวมเนื้อหามาอธิบายให้ทุกท่านกันครับ

Amazon EventBridge Scheduler Amazon EventBridge rules
Quota ของจำนวน Schedule 1 ล้านต่อบัญชี 1 Account ต่อ 1 Region จำกัดที่ 300 rules
Throughput การเรียกใช้ Event สามารถรองรับการ throughput ที่ 1,000 TPS จาก Quota ของจำนวน Schedule ทางด้านบน สามารถสร้าง schedule ได้แค่ 300 ต่อนาที จากโควต้า schedule ข้างต้น throughput จึงได้สูงสุดที่ 5 TPS
Target ทำงานกับ API กว่า 6,000 รายการ และ 270 บริการที่ใช้งาน AWS SDK Target Target มากกว่า 20 รายการที่รองรับใน EventBridge
การแสดงเวลา และ Timezone Timezone ทั้งหมด at(), cron(), rate()  และ DST (summer time) Timezone cron(), rate() จะเป็น UTC เท่านั้นและไม่รองรับ DST
schedule แบบ 1 ครั้ง Yes No※1
time window schedule Yes No
รองรับ event buses ไม่ต้องใช้ event buses Default buses เท่านั้น
การใช้โควต้าของ Rules ไม่ใช้ Quota, และมี soft limit ที่ 1 ล้าน schedule ใช้ Quota, โดยจะใช้ 2000 Rules ต่อ buses※2

※1 สามารถสร้าง Rules ที่จะทำงานได้ 1 ครั้งด้วยรูปแบบ cron

※2 ใน Amazon EventBridge UserGuide มีระบุไว้ว่ามี 300 Rules ต่อ buses จึงไม่แน่ใจว่า 2,000 ที่ระบุไว้นี้หมายถึงโควต้าใด

เรื่องที่น่าสนใจของ EventBridge Scheduler

จุดที่น่าสนใจ(สำหรับผู้เขียน)คือการรองรับ โควต้า และ Timezone

คงมีหลายท่านที่จำนวน Rules ของ EventBridge ที่มีให้ 300 Rules ถึงขีดจำกัดเร็วกว่าที่คาดไว้ ด้วย EventBridge Scheduler คุณสามารถสร้าง Schedule ได้มากถึง 1 ล้านต่อบัญชีเลยทีเดียว และในครั้งหน้าหากต้องการใช้งานเกี่ยวกับเวลามาทดลองใช้ EventBridge Scheduler กันดูนะครับ

เพื่อสร้าง Schedule ที่ทำงานเป็นประจำทุกๆ 1 นาที ตั้งแต่วันจันทร์~วันเสาร์ เวลา 7:30〜24:00
เลยลองสร้าง 3 Rules ขึ้นมาตามด้านล่างนี้


// วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 5:30〜5:59 (Thai Timezone)
cron(30-59 22 ? * SUN-FRI *)

//วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 06:00〜06:59 (Thai Timezone)
cron(* 23 ? * SUN-FRI *)

//วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 07:00〜23:59 (Thai Timezone)
cron(* 0-16 ? * MON-SAT *)

ใน EventBridge Scheduler สามารถลงข้อมูลได้ง่ายขึ้นเมื่อเทียบกับทางด้านบน


//วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 7:30〜7:59
cron(30-59 7 ? * MON-SAT *)

//วันจันทร์ ถึง วันเสาร์ ตั้งแต่เวลา 08:00〜23:59
cron(* 8-23 ? * MON-SAT *)

การอินพุตไปยัง target ของ EventBridge Scheduler

ความแตกต่างใหญ่ที่ไม่ได้ระบุไว้ในตารางเปรียบเทียบทางด้านบนคือวิธีการระบุอินพุตไปยัง Target

ใน EventBridge Rules มีตัวเลือกที่หลากหลายที่ใช้ในการอินพุตไปยัง Target แต่ EventBridge Scheduler จะเป็นวิธีส่งออกด้วยการอินพุต JSON Object เท่านั้น มองแวบแรกอาจจะดูเหมือนตัวเลือกจะลดลง แต่เนื่องจากในบรรดา JSON Object สามารถนำมาใช้เป็นองค์ประกอบต่อไปนี้เป็นตัวแปรได้ จึงทำให้รองรับองค์ประกอบหลักที่ใช้เป็นการอินพุตไปยังเป้าหมายในการทำงานของ Schedule ของ EventBridge Rule

  • aws.scheduler.schedule-arn: ARN ของ Schedule
  • aws.scheduler.scheduled-time:Schedule จะเป็นเวลาที่กำหนดเพื่อเรียกใช้ Target (เช่น 2022-03-22T18:59:43Z)
  • aws.scheduler.execution-id:ID เฉพาะที่กำหนดโดย EventBridge Scheduler ในทุกครั้งที่ทำการเรียกใช้ target
  • aws.scheduler.attempt-number:ตัวนับที่จำแนกจำนวนการทำงานในการเรียกใช้ในปัจจุบัน

ลองใช้งาน

มาลองตั้งค่าใช้งานผ่าน Management console กัน

บนหน้าเมนูของ EventBridge ทางด้านซ้ายมือจะมีหัวข้อ "scheduler" เพิ่มเข้ามาแล้ว

เลือกที่ปุ่ม "Create Schedule" เพื่อเข้าสู่หน้าจอการสร้าง Schedule

กำหนด Schedule name และ Schedule group
โดย cloudwatch metrics จะนับจำนวนการทำงานในแต่ละ Schedule group

เมื่อระบุ Flexible time windows ในหัวข้อ Schedule pattern แล้วก็จะทำงานตามกรอบเวลาที่ระบุไว้ โดยในครั้งนี้จะระบุไว้ที่ "15 นาที" ก็จะทำงาน ดังนั้นการทำงานก็จะอยู่ในกรอบตั้งแต่ 10:05 ถึง 10:20

และสามารถระบุ Timezone ได้

จากนั้นจะทำการเลือก Target โดยในครั้งนี้จะเลือกเป็น Lambda ครับ

โดยโค้ดของ Lambda จะเป็นโค้ดแบบเรียบง่ายที่จะแสดงแต่อินพุตที่ได้รับออกมา

import json

print('Loading function')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['schedule-arn'])
    print("value2 = " + event['schedule-time'])
    print("value3 = " + event['execution-id'])
    print("value4 = " + event['attempt-number'])
    return event['attempt-number']  # Echo back the first key value

ระบุ JSON Object ที่จะส่งผ่านไปยัง Target และฟังก์ชันต่างๆของ Lambda

สามารถเปิด/ปิด Schedule ได้เหมือนกับ EventBridge Rules
ในหัวข้อ Retry policy and dead-letter queue (DLQ) การตั้งค่าจะคล้ายกับ EventBridge Rules

ในหัวข้อ Encryption สามารถทำการเข้ารหัสโดยการใช้ คีย์เข้ารหัสของ AWS KMS โดยในครั้งนี้จะตั้งตามค่าเริ่มต้นครับ

และสุดท้ายลองตรวจสอบหน้าจอการตรวจสอบ หากไม่มีปัญหาก็จะสร้าง Schedule ขึ้นมา
Lambda จะทำงานในเวลา 10:06 หากอินพุตจากตัวแปรใน JSON Object ไม่มีปัญหาก็จะสามารถสามารถรับผ่าน Lambda ได้

เกี่ยวกับ CloudWatch Metric

จากที่ได้ตรวจสอบข้อมูลจาก EventBridge Scheduler UserGuide ณ ปัจจุบัน (เดือน พฤศจิกายน 2022) จะไม่มีรายละเอียดต่างๆที่เกี่ยวข้องกับ CloudWatch Metric ของ EventBridge Scheduler จากที่ตรวจสอบพบว่าจะมีเพียง InvocationAttemptCount เท่านั้น

โดย InvocationAttemptCount น่าจะหมายถึงจำนวนที่ได้เปิดการทำงาน Schedule และเท่าที่ได้ตรวจสอบเพิ่มเติมดู เหมือนจะมีการรวบรวมข้อมูลเฉพาะ Account และ ScheduleGroup เท่านั้น หาก UserGuide มีการอัพเดทเมื่อไหร่จะแจ้งให้ทราบครับ

อัพเดทข้อมูล: EventBridge Scheduler UserGuide มีการอัพเดทแล้วและมีเพิ่มรายละเอียดกี่ยวกับ CloudWatch Metric แล้ว Monitoring Amazon EventBridge Scheduler with Amazon CloudWatch - EventBridge Scheduler

สรุป

EventBridge Scheduler ฟังก์ชั่นใหม่ที่เราสามารถระบุ Time zoneและใช้งาน Schedule ได้! หากท่านใดสนใจมาลองใช้กันนะครับ