Cloud Functions สำหรับ Firebase ทริกเกอร์ตรงเวลาไหม


คำตอบ:


113

อัปเดต2019-04-18

ขณะนี้มีวิธีที่ง่ายมากในการปรับใช้โค้ดตามกำหนดเวลาบน Cloud Functions ผ่าน Firebase

คุณสามารถใช้ไวยากรณ์ข้อความง่ายๆ:

export scheduledFunctionPlainEnglish =
functions.pubsub.schedule('every 5 minutes').onRun((context) => {
    console.log('This will be run every 5 minutes!');
})

หรือรูปแบบตาราง cron ที่ยืดหยุ่นมากขึ้น:

export scheduledFunctionCrontab =
functions.pubsub.schedule('5 11 * * *').onRun((context) => {
    console.log('This will be run every day at 11:05 AM UTC!');
});

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสิ่งนี้โปรดดู:

โปรดทราบว่าโครงการของคุณต้องอยู่ในแผน Blaze เพื่อให้สามารถใช้งานได้ดังนั้นฉันจึงปล่อยให้ตัวเลือกอื่นด้านล่างเป็นข้อมูลอ้างอิง

หากคุณต้องการกำหนดเวลาการเรียกใช้ฟังก์ชันคลาวด์เพียงครั้งเดียวในช่วงเวลาที่ล่าช้าจากภายในการเรียกใช้ทริกเกอร์อื่นคุณสามารถใช้งานระบบคลาวด์เพื่อตั้งค่าได้ อ่านบทความนี้เพื่อดูตัวอย่างเพิ่มเติมเกี่ยวกับวิธีการทำงาน

คำตอบเดิมด้านล่าง ...


ยังไม่มีทริกเกอร์ประเภท runat / cron ในตัว

ในขณะนี้ตัวเลือกที่ดีที่สุดคือใช้บริการภายนอกเพื่อทริกเกอร์ฟังก์ชัน HTTP เป็นระยะ ดูตัวอย่างนี้ในrepo ตัวอย่างฟังก์ชันสำหรับข้อมูลเพิ่มเติม หรือใช้ Google Cloud Scheduler ที่เพิ่งเปิดตัวเพื่อเรียกใช้ Cloud Functions ผ่าน PubSub หรือ HTTPS:

ใส่คำอธิบายภาพที่นี่

ฉันยังขอแนะนำให้อ่านโพสต์นี้ในบล็อก Firebase: วิธีการบัญชี (Cron) งานที่มีฟังก์ชั่นคลาวด์สำหรับ Firebaseและวิดีโอนี้: Timing ฟังก์ชั่นคลาวด์สำหรับ Firebase ใช้ HTTP Trigger และ Cron

ลิงก์สุดท้ายนั้นใช้cron-job.orgเพื่อทริกเกอร์ Cloud Functions และใช้งานได้กับโปรเจ็กต์ที่อยู่ในแผนฟรี โปรดทราบว่าสิ่งนี้อนุญาตให้ทุกคนเรียกใช้ฟังก์ชันของคุณโดยไม่ได้รับอนุญาตดังนั้นคุณอาจต้องการรวมกลไกการป้องกันการละเมิดไว้ในโค้ด


1
ไม่มีอะไรเปลี่ยนแปลงในรอบนี้ รวมทั้งข้อเท็จจริงที่cron-job.orgเจนพูดถึงในบล็อกโพสต์นั้นใช้งานได้ฟรี
Frank van Puffelen

2
วิดีโอจาก Jen ถูกแท็กว่าเลิกใช้งานแล้ว แล้วมีวิธีอื่นอีกไหม?
b-fg

2
แนวทางดังกล่าวใช้ได้ในปัจจุบันเช่นเดียวกับที่ทำวิดีโอ (และบล็อกโพสต์) ไวยากรณ์มีการเปลี่ยนแปลงเล็กน้อย แต่ฉันไม่คิดว่ากรณีนี้จะได้รับผลกระทบจากสิ่งนั้น หากคุณประสบปัญหาในการทำงานนี้ให้เปิดคำถามที่แสดงว่าคุณได้ทำอะไรไปแล้ว
Frank van Puffelen

1
ว้าวในที่สุดพวกเขาก็ใช้วิธีง่ายๆ! สุดท้าย !!!! ขอบคุณสำหรับการอัปเดต
schankam

1
จากหน้า Cloud Scheduler: Each Cloud Scheduler job costs $0.10 (USD) per monthสมมติว่า "job" ไม่ได้หมายความว่าทุกครั้งที่สิ่งที่กำหนดเวลาเริ่มทำงาน แต่เป็นต้นทุนต่อตัวจับเวลา? คืองานที่ทำงานทุกนาทีมีค่าใช้จ่ายเพียง $ 0.10? (ไม่รวมฟังก์ชันคลาวด์ที่เรียกใช้)
Aaron Ash

12

สิ่งที่คุณทำได้คือหมุนอินสแตนซ์ AppEngine ที่ทริกเกอร์โดยงาน cron และส่งไปที่ PubSub ฉันเขียนบล็อกโพสต์โดยเฉพาะเกี่ยวกับเรื่องนี้คุณอาจต้องการดู:

https://mhaligowski.github.io/blog/2017/05/25/scheduled-cloud-function-execution.html


1
ค่าใช้จ่ายโดยประมาณต่อเดือนสำหรับงาน cron ที่ทริกเกอร์ทุกๆชั่วโมงคือเท่าไร?
Ehtesham Hasan

3
@EhteshamHasan ดูเหมือนว่ามันอาจฟรี: cloud.google.com/free ปัจจุบันฟรีอินสแตนซ์ 28 ชั่วโมง / วัน นอกจากนี้ยังมีอินสแตนซ์ f1-micro ของ Google Compute Engine พร้อมด้วย Linux ที่รัน crons สำหรับเอทีเอ็มฟรี
bitsoflogic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.