Firebase Cloud Functions — τι είναι, ενεργοποιητές και πώς να γράφουμε συναρτήσεις

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-04-28 Χρόνος ανάγνωσης: 15 λεπ

Το Firebase Cloud Functions είναι μια πλατφόρμα διακομιστή για την εκτέλεση κώδικα σε ένα διαχειριζόμενο περιβάλλον Node.js, που αντιδρά σε συμβάντα Firebase, αιτήματα HTTPS και αλλαγές στις υπηρεσίες cloud της Google. Σε αντίθεση με το παραδοσιακό backend, ο προγραμματιστής δεν χρειάζεται να ρυθμίσει διακομιστή, να εγκαταστήσει web server ή να ανησυχεί για την κλιμάκωση — κάθε συνάρτηση εκτελείται σε απομονωμένο κοντέινερ και λαμβάνει αυτόματα όσους πόρους χρειάζεται. Σύμφωνα με το Google Firebase (2026), η πλατφόρμα επεξεργάζεται καθημερινά πάνω από 2 δισεκατομμύρια κλήσεις συναρτήσεων, παρέχοντας αρχιτεκτονική χωρίς διακομιστή για εκατομμύρια εφαρμογές για κινητά.

Βασικά σημεία

  • Cloud Functions — κώδικας διακομιστή που εκτελείται ως απάντηση σε συμβάντα Firebase και αιτήματα HTTPS.
  • Μοντέλο χωρίς διακομιστή απαλλάσσει από τη διαχείριση υποδομής: η κλιμάκωση γίνεται αυτόματα.
  • Ενεργοποιητές περιλαμβάνουν αλλαγές στο Firestore, Realtime Database, Storage, Authentication και Pub/Sub.
  • Γλώσσα ανάπτυξης — JavaScript, TypeScript ή Python (μέσω Google Cloud Functions).
  • Ψυχρή εκκίνηση — η πρώτη κλήση μετά από αδράνεια μπορεί να διαρκέσει έως 2 δευτερόλεπτα.

Τι είναι το Firebase Cloud Functions και πώς είναι δομημένο

Το Firebase Cloud Functions είναι μια υπολογιστική πλατφόρμα που βασίζεται στο Google Cloud Functions (GCF) και έχει προσαρμοστεί για το οικοσύστημα Firebase. Οι συναρτήσεις αποτελούν συνηθισμένο κώδικα JavaScript ή TypeScript, που εξάγεται από ένα module και καταχωρείται για έναν συγκεκριμένο τύπο συμβάντος. Όταν συμβαίνει το συμβάν (για παράδειγμα, ο χρήστης εγγράφεται ή ανεβάζει ένα αρχείο), το Firebase Cloud Functions εκτελεί τον αντίστοιχο κώδικα, μεταφέροντάς του το πλαίσιο του συμβάντος.

Η αρχιτεκτονική του Cloud Functions ακολουθεί την αρχή της ενιαίας ευθύνης: μία συνάρτηση επεξεργάζεται έναν τύπο συμβάντος και εκτελεί μία ατομική λειτουργία. Για παράδειγμα, η συνάρτηση sendWelcomeEmail καλείται όταν δημιουργείται νέος χρήστης στο Firebase Authentication και στέλνει ένα email καλωσορίσματος. Αυτή η απομόνωση απλοποιεί τον εντοπισμό σφαλμάτων, τις δοκιμές και την επαναχρησιμοποίηση συναρτήσεων σε διαφορετικά έργα.

Κάθε συνάρτηση εκτελείται σε απομονωμένο κοντέινερ με προσωρινό κύκλο ζωής. Ο μέγιστος χρόνος εκτέλεσης είναι από προεπιλογή 60 δευτερόλεπτα (συναρτήσεις HTTPS — 9 λεπτά). Αν η συνάρτηση δεν χωράει στο χρονικό όριο, το αίτημα ολοκληρώνεται με σφάλμα 500. Για μεγάλες λειτουργίες χρησιμοποιήστε Cloud Tasks ή Pub/Sub με επαναλήψεις. Τα κοντέινερ μπορούν να επαναχρησιμοποιηθούν για επόμενες κλήσεις (keep-alive), γεγονός που μειώνει την καθυστέρηση στις ψυχρές εκκινήσεις μετά την πρώτη κλήση.

Περιβάλλον εκτέλεσης και εκδόσεις Node.js

Το Firebase Cloud Functions υποστηρίζει αρκετές εκδόσεις Node.js: 18, 20 και 22 (συνιστώμενη για νέα έργα). Η επιλογή έκδοσης ορίζεται στο πεδίο engines του αρχείου package.json. Το Firebase CLI διαμορφώνει αυτόματα το περιβάλλον εκτέλεσης βάσει της καθορισμένης έκδοσης. Σημαντικό: το Firebase Cloud Functions δεν υποστηρίζει την εκτέλεση αυθαίρετων κοντέινερ Docker — το περιβάλλον καθορίζεται αυστηρά από το Google Cloud Functions.

Για νέα έργα συνιστάται το Node.js 22, καθώς περιλαμβάνει τις τελευταίες βελτιστοποιήσεις V8, βελτιωμένη εργασία με modules ESM και υποστήριξη WebSocket σε επίπεδο πλατφόρμας. Αν το έργο χρησιμοποιεί εξαρτήσεις που μεταγλωττίστηκαν για συγκεκριμένη έκδοση Node (για παράδειγμα, native modules C++), η συμβατότητα πρέπει να ελεγχθεί ξεχωριστά — δεν μεταγλωττίζονται όλα τα native modules στο περιβάλλον GCF.

Διαφορά μεταξύ Firebase Cloud Functions και Google Cloud Functions

Το Firebase Cloud Functions είναι ένα περιτύλιγμα πάνω στο Google Cloud Functions με προεγκατεστημένο Firebase SDK και ενσωμάτωση με τις υπηρεσίες Firebase. Ο προγραμματιστής γράφει κώδικα χρησιμοποιώντας το SDK firebase-functions, το οποίο παρέχει τυποποιημένους ενεργοποιητές για όλες τις υπηρεσίες Firebase. Το Google Cloud Functions είναι μια πλατφόρμα χαμηλότερου επιπέδου, όπου οι ενεργοποιητές διαμορφώνονται ρητά μέσω Eventarc ή Pub/Sub.

Βασική διαφορά: στο Firebase Cloud Functions ο ενεργοποιητής καταχωρείται δηλωτικά μέσω της κλήσης functions.firestore.document('path').onWrite(), ενώ στο Google Cloud Functions — μέσω διαμόρφωσης Eventarc με φιλτράρισμα ανά χαρακτηριστικά συμβάντος. Το Firebase Cloud Functions διατίθεται επίσης αυτόματα με Admin SDK, αρχικοποιημένο με τα δικαιώματα του λογαριασμού υπηρεσίας του έργου, παρέχοντας πλήρη πρόσβαση σε όλες τις υπηρεσίες Firebase χωρίς επιπλέον ρύθμιση.

Τύποι ενεργοποιητών: ποια συμβάντα υποστηρίζονται

Το Firebase Cloud Functions υποστηρίζει 8 κατηγορίες ενεργοποιητών, καθεμία από τις οποίες αντιστοιχεί σε μια συγκεκριμένη υπηρεσία Firebase ή Google Cloud. Ο ενεργοποιητής είναι μια συνθήκη στην επέλευση της οποίας η συνάρτηση καλείται αυτόματα. Ο προγραμματιστής δεν διαχειρίζεται άμεσα τον κύκλο ζωής της συνάρτησης: το Firebase CLI καταχωρεί τον ενεργοποιητή στο Google Cloud Eventarc και η πλατφόρμα cloud εκκινεί μόνη της τη συνάρτηση κατά την επέλευση του συμβάντος.

Οι πιο δημοφιλείς ενεργοποιητές — ενεργοποιητές Firestore: onWrite, onCreate, onUpdate, onDelete. Ενεργοποιούνται κατά την αλλαγή εγγράφων στις συλλογές Firestore. Η συνάρτηση λαμβάνει στιγμιότυπα του εγγράφου πριν και μετά την αλλαγή, επιτρέποντας τη σύγκριση τιμών και την αντίδραση μόνο σε ορισμένες αλλαγές. Για παράδειγμα, κατά την αλλαγή της κατάστασης παραγγελίας από "pending" σε "shipped" μπορείτε να στείλετε ειδοποίηση push στον χρήστη.

Οι ενεργοποιητές Authentication (onCreate, onDelete) ενεργοποιούνται κατά τη δημιουργία ή διαγραφή λογαριασμού. Χρησιμοποιούνται για την αρχικοποίηση δεδομένων χρήστη: δημιουργία εγγράφου χρήστη στο Firestore, αποστολή email καλωσορίσματος, εγγραφή στην αναλυτική. Σημαντικό: η συνάρτηση δεν μπορεί να ακυρώσει τη δημιουργία χρήστη — εκτελείται αφού ο λογαριασμός έχει ήδη δημιουργηθεί. Για προ-έλεγχο χρησιμοποιήστε συναρτήσεις αποκλεισμού (Blocking Functions), διαθέσιμες στην πλατφόρμα Identity Platform.

Κατηγορία ενεργοποιητήΣυμβάνΠαράδειγμα χρήσης
FirestoreonWrite, onCreate, onUpdate, onDeleteΕνημέρωση μετρητή like κατά την προσθήκη
AuthenticationonCreate, onDeleteΔημιουργία προφίλ χρήστη κατά την εγγραφή
Realtime DBonWrite, onCreate, onUpdate, onDeleteΣυντονισμός μηνυμάτων σε συνομιλία
StorageonFinalize, onArchive, onDeleteΔημιουργία μικρογραφίας μετά τη μεταφόρτωση εικόνας
Pub/SubonPublishΠεριοδική εκκίνηση (cron) μέσω Cloud Scheduler
HTTPSonRequestΤελικό σημείο REST API για εξωτερικές υπηρεσίες

Ενεργοποιητές HTTPS και CORS

Οι συναρτήσεις HTTPS (onRequest) επιτρέπουν τη δημιουργία πλήρων τελικών σημείων REST API, προσβάσιμων μέσω HTTP. Σε αντίθεση με τους ενεργοποιητές συμβάντων, οι συναρτήσεις HTTPS καλούνται μέσω URL της μορφής https://{region}-{project}.cloudfunctions.net/{functionName}. Είναι σημαντικό να διαμορφώσετε σωστά το CORS αν το τελικό σημείο καλείται από πρόγραμμα περιήγησης ή εφαρμογή για κινητά. Το Firebase SDK δεν περιλαμβάνει αυτόματα τις επικεφαλίδες CORS — πρέπει να προστεθούν χειροκίνητα μέσω middleware.

Για πελάτες κινητών (Android, iOS) το CORS δεν απαιτείται, καθώς οι εγγενείς πελάτες HTTP δεν περιορίζονται από την πολιτική Cross-Origin. Το CORS αφορά μόνο αιτήματα ιστού. Αν η συνάρτηση HTTPS καλείται και από την εφαρμογή και από τον ιστό, προσθέστε γενική επεξεργασία CORS: res.set('Access-Control-Allow-Origin', '*') για development ή τη λίστα επιτρεπόμενων τομέων για production.

Προγραμματισμός με Pub/Sub και Cloud Scheduler

Για περιοδική εκτέλεση (εργασίες cron) χρησιμοποιήστε τον συνδυασμό Cloud Scheduler και Pub/Sub. Το Cloud Scheduler στέλνει ένα μήνυμα στο θέμα Pub/Sub σύμφωνα με το πρόγραμμα και ο ενεργοποιητής onPublish επεξεργάζεται αυτό το μήνυμα. Το Firebase CLI δεν υποστηρίζει άμεση σύνταξη cron — το πρόγραμμα ορίζεται μέσω της κονσόλας Google Cloud ή Terraform σε μορφή unix-cron: 0 3 * * * (καθημερινά στις 3:00).

Παραδείγματα εργασιών: καθημερινή αποστολή, εκκαθάριση παρωχημένων δεδομένων, δημιουργία αναφορών, συγχρονισμός με εξωτερικά API. Σημαντικό: το Cloud Scheduler είναι επί πληρωμή υπηρεσία Google Cloud (περίπου 2 $ το μήνα για μία εργασία). Κάθε ενεργοποίηση θεωρείται ξεχωριστή κλήση συνάρτησης και τιμολογείται με τις τυπικές τιμές του Cloud Functions.

Πώς να γράφουμε και να αναπτύσσουμε συναρτήσεις

Η ανάπτυξη του Cloud Functions ξεκινά με την αρχικοποίηση του έργου μέσω του Firebase CLI: firebase init functions. Αυτή η εντολή δημιουργεί τον κατάλογο functions/ με το πρότυπο index.js (ή index.ts), το αρχείο package.json και τη διαμόρφωση TypeScript (αν επιλεγεί). Μετά την αρχικοποίηση αρκεί να γράψετε μια συνάρτηση, να την εξάγετε από το module και να εκτελέσετε firebase deploy --only functions για ανάπτυξη.

Κάθε συνάρτηση καταχωρείται μέσω κλήσης της μεθόδου του αντίστοιχου ενεργοποιητή. Παράδειγμα συνάρτησης HTTPS: exports.helloWorld = functions.https.onRequest((req, res) => { res.send("Hello!"); }). Οι συναρτήσεις Firebase χρησιμοποιούν το ασύγχρονο μοντέλο: για ενεργοποιητές συμβάντων (όχι HTTPS) η συνάρτηση πρέπει να επιστρέφει Promise. Το Firebase περιμένει την ολοκλήρωση του Promise πριν κλείσει το κοντέινερ. Αν το Promise δεν επιστραφεί, η συνάρτηση μπορεί να διακοπεί πριν ολοκληρωθούν οι ασύγχρονες λειτουργίες.

Η τοπική ανάπτυξη γίνεται μέσω του Firebase Emulator Suite, το οποίο περιλαμβάνει τον εξομοιωτή Cloud Functions. Η εντολή firebase emulators:start εκκινεί τοπικό διακομιστή με συναρτήσεις, προσβάσιμο στη διεύθυνση http://localhost:5001. Ο εξομοιωτής υποστηρίζει hot reload κατά την αλλαγή κώδικα και είναι πλήρως απομονωμένος από το περιβάλλον παραγωγής, επιτρέποντας τη δοκιμή συναρτήσεων χωρίς κίνδυνο επηρεασμού πραγματικών δεδομένων.

Διαχείριση εξαρτήσεων και διαμόρφωσης

Οι εξαρτήσεις του Cloud Functions διαχειρίζονται μέσω του package.json. Το Firebase εγκαθιστά μόνο εξαρτήσεις παραγωγής (dependencies, όχι devDependencies). Το μέγεθος του πακέτου συναρτήσεων επηρεάζει τον χρόνο ψυχρής εκκίνησης: συνιστάται η ελαχιστοποίηση του αριθμού εξαρτήσεων. Για εργασία με το Firebase Admin SDK, η εξάρτηση firebase-admin είναι ήδη προεγκατεστημένη — δεν χρειάζεται να προστεθεί χειροκίνητα.

Τα εμπιστευτικά δεδομένα (κλειδιά API, token) δεν πρέπει να αποθηκεύονται στον κώδικα της συνάρτησης. Χρησιμοποιήστε το functions.config() για αποθήκευση διαμόρφωσης: firebase functions:config:set stripe.key="sk_...". Οι τιμές είναι κρυπτογραφημένες και διαθέσιμες κατά την εκτέλεση μέσω functions.config().stripe.key. Για μεγάλες σειριοποιημένες διαμορφώσεις χρησιμοποιήστε το Secret Manager του Google Cloud.

Διαχείριση σφαλμάτων και καταγραφή

Η καταγραφή στο Cloud Functions γίνεται μέσω console.log, console.warn και console.error. Όλα τα αρχεία καταγραφής συλλέγονται αυτόματα στο Google Cloud Logging και είναι διαθέσιμα στην κονσόλα Firebase (ενότητα Functions > Logs). Για δομημένη καταγραφή χρησιμοποιήστε τη βιβλιοθήκη winston ή pino, που υποστηρίζουν μορφοποίηση JSON και επίπεδα καταγραφής.

Η διαχείριση σφαλμάτων είναι κρίσιμη για την αξιοπιστία: μια μη επεξεργασμένη εξαίρεση στο Promise ολοκληρώνει τη συνάρτηση με σφάλμα, μετά την οποία το Firebase επαναλαμβάνει αυτόματα την κλήση (retry) με εκθετική καθυστέρηση. Ο αριθμός retry διαμορφώνεται: από 0 έως άπειρο. Για ενεργοποιητές συμβάντων συνιστάται η ενεργοποίηση retry ώστε να διασφαλίζεται η επεξεργασία κάθε συμβάντος ακόμη και σε προσωρινές βλάβες εξωτερικών υπηρεσιών.

Ψυχρή εκκίνηση και κλιμάκωση

Η ψυχρή εκκίνηση (cold start) είναι η καθυστέρηση κατά την πρώτη κλήση της συνάρτησης μετά από περίοδο αδράνειας, όταν το κοντέινερ με τον κώδικα φορτώνεται και αρχικοποιείται εκ νέου. Σύμφωνα με το Firebase documentation (2026), η ψυχρή εκκίνηση διαρκεί από 200 ms έως 2 δευτερόλεπτα, ανάλογα με το μέγεθος του πακέτου, τον αριθμό εξαρτήσεων και την περιοχή. Για τη διεπαφή χρήστη, η καθυστέρηση άνω του 1 δευτερολέπτου είναι αισθητή και μπορεί να επηρεάσει την εμπειρία χρήστη.

Τρόποι ελαχιστοποίησης της ψυχρής εκκίνησης: ελαχιστοποίηση εξαρτήσεων, χρήση TypeScript με μεταγλώττιση σε CommonJS, μείωση του μεγέθους του πακέτου συναρτήσεων, ορισμός ελάχιστου αριθμού ενεργών περιπτώσεων. Το Firebase Cloud Functions v2 (2nd gen) επιτρέπει τον ορισμό minInstances — ελάχιστος αριθμός θερμασμένων κοντέινερ, πάντα έτοιμων για επεξεργασία αιτημάτων. Για τη θέρμανση κοντέινερ χρεώνεται τέλος για τον χρόνο αδράνειας.

Η κλιμάκωση του Cloud Functions γίνεται αυτόματα: με την αύξηση του αριθμού αιτημάτων το Firebase δημιουργεί νέα κοντέινερ. Από προεπιλογή, ο μέγιστος αριθμός παράλληλων περιπτώσεων είναι 3000 (όριο του έργου Google Cloud). Κάθε περίπτωση επεξεργάζεται ένα αίτημα ταυτόχρονα. Αν η συνάρτηση είναι γρήγορη (λιγότερο από 100 ms), μια περίπτωση μπορεί να επεξεργαστεί έως 10 αιτήματα ανά δευτερόλεπτο, δίνοντας αιχμή απόδοσης έως 30 000 αιτήματα ανά δευτερόλεπτο ανά έργο.

Ρύθμιση minInstances και maxInstances

Το minInstances είναι μια παράμετρος που δεσμεύει τον καθορισμένο αριθμό κοντέινερ και τα διατηρεί θερμασμένα. Συνιστάται για κρίσιμες συναρτήσεις HTTPS, όπου η καθυστέρηση ψυχρής εκκίνησης είναι απαράδεκτη. Για παράδειγμα, για τελικό σημείο ταυτοποίησης ορίστε minInstances: 1. Το maxInstances είναι όριο στον μέγιστο αριθμό παράλληλων περιπτώσεων, χρήσιμο για την αποτροπή ανεξέλεγκτης αύξησης κόστους κατά την απότομη αύξηση επισκεψιμότητας.

Η ρύθμιση γίνεται στον κώδικα: functions.runWith({ minInstances: 1, maxInstances: 10 }). Σημαντικό: το minInstances αυξάνει το κόστος, καθώς το κοντέινερ λειτουργεί συνεχώς. Για έργα δοκιμών το minInstances πρέπει να απενεργοποιείται. Για παραγωγή συνιστάται minInstances για όλες τις δημόσιες συναρτήσεις HTTPS και 0 για ενεργοποιητές συμβάντων, όπου η καθυστέρηση 1 δευτερολέπτου δεν είναι κρίσιμη.

Περιοχές ανάπτυξης

Η περιοχή ανάπτυξης επηρεάζει την καθυστέρηση έως τους τελικούς χρήστες και το κόστος εξερχόμενης επισκεψιμότητας. Το Firebase Cloud Functions είναι διαθέσιμο σε 30+ περιοχές Google Cloud. Για εφαρμογές για κινητά επιλέξτε την περιοχή που βρίσκεται πλησιέστερα στο κοινό-στόχο σας: us-central1 για την Αμερική, europe-west1 για την Ευρώπη, asia-east2 για την Ασία. Η περιοχή δεν μπορεί να αλλάξει μετά την ανάπτυξη χωρίς εκ νέου ανάπτυξη της συνάρτησης.

Η αλλαγή περιοχής γίνεται μέσω της παραμέτρου region στον κώδικα: functions.region('europe-west1'). Όλες οι συναρτήσεις σε ένα αρχείο μπορούν να έχουν διαφορετικές περιοχές. Για παγκόσμια έργα συνιστάται η ανάπτυξη συναρτήσεων σε πολλές περιοχές και η χρήση Cloud Load Balancing για κατανομή επισκεψιμότητας, αν και για τις περισσότερες εφαρμογές για κινητά μία περιοχή αρκεί με σωστή επιλογή.

Παραδείγματα κώδικα για Firebase Cloud Functions

Ας εξετάσουμε πρακτικά παραδείγματα Cloud Functions σε TypeScript. Ο κώδικας χρησιμοποιεί Firebase Functions SDK v2 (2nd gen) με δομημένη σύνταξη ES. Τα παραδείγματα περιλαμβάνουν την επεξεργασία συμβάντος δημιουργίας χρήστη, τη δημιουργία μικρογραφίας κατά τη μεταφόρτωση εικόνας και ένα απλό τελικό σημείο HTTPS για REST API. Όλες οι συναρτήσεις είναι ασύγχρονες με επιστροφή Promise για σωστή ολοκλήρωση του κοντέινερ.

Πριν εκτελέσετε, βεβαιωθείτε ότι το Firebase CLI ενημερώθηκε στην έκδοση 13+: npm install -g firebase-tools. Οι συναρτήσεις v2 απαιτούν το τιμολογιακό πλάνο Blaze. Αρχικοποίηση: firebase init functions με επιλογή TypeScript.

Επεξεργασία εγγραφής χρήστη

Το πρώτο παράδειγμα — δημιουργία εγγράφου στο Firestore κατά την εγγραφή νέου χρήστη. Η συνάρτηση ενεργοποιείται από το συμβάν auth.user().onCreate και γράφει βασικό προφίλ στη συλλογή users/{uid}. Αυτό επιτρέπει την εγγύηση ότι για κάθε εγγεγραμμένο χρήστη υπάρχει έγγραφο με τα απαραίτητα πεδία.

typescript
import * as functions from "firebase-functions"
import * as admin from "firebase-admin"

admin.initializeApp()

export const createUserProfile = functions.auth
    .user()
    .onCreate(async (user) => {
        const profile = {
            email: user.email,
            displayName: user.displayName ?? "User",
            createdAt: admin.firestore.Timestamp.now(),
            role: "free",
            avatarUrl: null,
        }

        await admin.firestore()
            .collection("users")
            .doc(user.uid)
            .set(profile)

        console.log(`Profile created for ${user.uid}`)
    })

Η συνάρτηση createUserProfile είναι ασύγχρονη — επιστρέφει Promise, το οποίο περιμένει το Firebase πριν ολοκληρωθεί. Αν η εγγραφή στο Firestore ολοκληρωθεί με σφάλμα (για παράδειγμα, λόγω έλλειψης δικαιωμάτων), η συνάρτηση θα επαναληφθεί αυτόματα (αν είναι ενεργοποιημένο το retry). Το πεδίο role με τιμή "free" επιτρέπει την εφαρμογή περιορισμών του δωρεάν πλάνου απευθείας στους Security Rules του Firestore, συγκρίνοντας το resource.data.role με το απαιτούμενο επίπεδο πρόσβασης.

Δημιουργία μικρογραφίας κατά τη μεταφόρτωση εικόνας

Το δεύτερο παράδειγμα — ενεργοποιητής Storage για αυτόματη δημιουργία μικρογραφίας (thumbnail) μετά τη μεταφόρτωση εικόνας. Η συνάρτηση δημιουργεί μειωμένο αντίγραφο μεγέθους 200x200 pixels και το αποθηκεύει στη διαδρομή του αρχικού αρχείου με πρόθεμα thumb_. Για την επεξεργασία εικόνων χρησιμοποιείται η βιβλιοθήκη sharp, η οποία υποστηρίζει όλες τις κοινές μορφές και λειτουργεί στο περιβάλλον Node.js χωρίς εξαρτήσεις συστήματος.

typescript
import * as path from "path"
import * as os from "os"
import * as sharp from "sharp"

export const generateThumbnail = functions.storage
    .object()
    .onFinalize(async (object) => {
        if (!object.contentType?.startsWith("image/")) return

        const filePath = object.name!
        const thumbPath = filePath.replace(
            /(\.\w+)$/, "_thumb$1"
        )

        const bucket = admin.storage().bucket()
        const tempDir = os.tmpdir()
        const tempFile = path.join(tempDir, path.basename(filePath))

        await bucket.file(filePath).download({ destination: tempFile })
        await sharp(tempFile)
            .resize(200, 200, { fit: "cover" })
            .toFile(tempFile.replace(/(\.\w+)$/, "_thumb$1"))

        await bucket.upload(tempFile.replace(
            /(\.\w+)$/, "_thumb$1"
        ), { destination: thumbPath })
    })

Η συνάρτηση generateThumbnail ελέγχει το Content-Type του αντικειμένου και αγνοεί τα μη-εικόνες, γεγονός που εξοικονομεί πόρους. Για εργασία με sharp, η εξάρτηση πρέπει να προστεθεί στο package.json. Η μικρογραφία δημιουργείται με την παράμετρο fit: "cover", η οποία κόβει την εικόνα στο κέντρο σε τετράγωνο 200x200 pixels. Μετά τη δημιουργία, η μικρογραφία ανεβάζεται ξανά στο ίδιο bucket με τροποποιημένο όνομα.

Τελικό σημείο HTTPS για δημόσιο API

Το τρίτο παράδειγμα — συνάρτηση HTTPS, που υλοποιεί τελικό σημείο REST API για έλεγχο κατάστασης διακομιστή. Η συνάρτηση δέχεται αίτημα GET και επιστρέφει JSON με πληροφορίες για την κατάσταση των υπηρεσιών Firebase που συνδέονται στο έργο. Το τελικό σημείο είναι χρήσιμο για παρακολούθηση και για εξωτερικά συστήματα που πρέπει να ελέγξουν τη διαθεσιμότητα του backend πριν στείλουν δεδομένα.

typescript
import * as express from "express"

const app = express.Router()

app.get("/status", async (req, res) => {
    try {
        const db = admin.firestore()
        await db.collection("_health").doc("check").get()
        res.json({ status: "ok", timestamp: Date.now() })
    } catch (error) {
        res.status(503).json({ status: "error", message: error })
    }
})

export const api = functions.https.onRequest(app)

Η συνάρτηση api χρησιμοποιεί express Router για δρομολόγηση, κάτι που είναι βολικό κατά τη δημιουργία πολλών τελικών σημείων σε μία συνάρτηση. Ο έλεγχος υγείας καταγράφεται στο Firestore στη συλλογή _health, επιτρέποντας την ταυτόχρονη επαλήθευση της διαθεσιμότητας του Firestore. Για παραγωγή συνιστάται η προσθήκη ταυτοποίησης αιτήματος μέσω κλειδιού API ή token Firebase Auth, για να αποτραπεί η κατάχρηση του δημόσιου τελικού σημείου.

Τυπικά σενάρια χρήσης σε εφαρμογές για κινητά

Το Cloud Functions χρησιμοποιείται συχνότερα για εργασίες που είναι αδύνατο ή μη επιθυμητό να εκτελεστούν στον πελάτη: αποστολή ειδοποιήσεων push, δημιουργία προεπισκοπήσεων μεταφορτωμένων εικόνων, ενσωμάτωση με εξωτερικά συστήματα πληρωμών, συντονισμός περιεχομένου, συγχρονισμός δεδομένων μεταξύ Firebase και υπηρεσιών τρίτων. Το μοντέλο χωρίς διακομιστή καθιστά αυτές τις εργασίες οικονομικές: το τέλος χρεώνεται μόνο για τον πραγματικό χρόνο εκτέλεσης του κώδικα.

Η ενσωμάτωση με συστήματα πληρωμών είναι τυπικό σενάριο για εφαρμογές με αγορές εντός εφαρμογής. Το Cloud Functions λαμβάνει webhook από τον πάροχο πληρωμών (Stripe, PayPal), ελέγχει την υπογραφή του αιτήματος, ενημερώνει την κατάσταση συνδρομής στο Firestore και στέλνει επιβεβαίωση στον χρήστη. Όλος ο κώδικας εκτελείται στον διακομιστή χωρίς κίνδυνο υποκατάστασης δεδομένων στον πελάτη. Σύμφωνα με το Stripe documentation (2026), η επεξεργασία webhook διαρκεί λιγότερο από 500 ms.

Ο έξυπνος συντονισμός περιεχομένου χρησιμοποιεί τον ενεργοποιητή Storage για αυτόματο έλεγχο των μεταφορτωμένων εικόνων μέσω του Google Cloud Vision API. Η συνάρτηση στέλνει την εικόνα στο Vision API για ανίχνευση μη ασφαλούς περιεχομένου (βία, περιεχόμενο για ενήλικες) και, αν ξεπεραστεί το όριο, διαγράφει το αρχείο και ειδοποιεί τον διαχειριστή. Αυτό το σενάριο είναι κρίσιμο για εφαρμογές UGC με γκαλερί χρηστών.

Η συσσώρευση δεδομένων — το Cloud Functions ως αντικατάσταση μετρητών Firebase Realtime Database. Αντί για ανάγνωση και εγγραφή του μετρητή στον πελάτη (που οδηγεί σε race conditions), χρησιμοποιήστε τον ενεργοποιητή Firestore onWrite για ατομική ενημέρωση συγκεντρωτικών πεδίων. Για παράδειγμα, η συνάρτηση υπολογίζει τον αριθμό like μιας ανάρτησης σε κάθε προσθήκη ή διαγραφή εγγράφου στην υποσυλλογή /posts/{postId}/likes/{userId} και ενημερώνει το πεδίο likesCount στο γονικό έγγραφο.

Συχνές ερωτήσεις

Πόσο μπορεί να λειτουργήσει μία συνάρτηση;

Ο μέγιστος χρόνος εκτέλεσης εξαρτάται από τον τύπο: συναρτήσεις HTTPS — 9 λεπτά, ενεργοποιητές συμβάντων — 60 δευτερόλεπτα (v2: έως 60 λεπτά). Για μεγάλες λειτουργίες χρησιμοποιήστε Cloud Tasks ή Pub/Sub με ασύγχρονη επεξεργασία. Το χρονικό όριο ορίζεται στον κώδικα μέσω runWith({ timeoutSeconds: 120 }).

Πώς να εντοπίσω σφάλματα στο Cloud Functions τοπικά;

Χρησιμοποιήστε το Firebase Emulator Suite: firebase emulators:start --only functions. Ο εξομοιωτής εκτελεί συναρτήσεις τοπικά στη θύρα 5001 με υποστήριξη hot reload. Για ενεργοποιητές Firestore και Auth, ο εξομοιωτής αντικαθιστά τις πραγματικές υπηρεσίες, επιτρέποντας τη δοκιμή σεναρίων χωρίς κίνδυνο για δεδομένα παραγωγής.

Ποια είναι η διαφορά μεταξύ συναρτήσεων 1st gen και 2nd gen;

Το 2nd gen χρησιμοποιεί Google Cloud Run και Eventarc, παρέχοντας μεγαλύτερο χρονικό όριο (έως 60 λεπτά), ταυτόχρονη επεξεργασία αιτημάτων από μία περίπτωση και βελτιωμένη ενσωμάτωση με υπηρεσίες Google Cloud. Το 1st gen χρησιμοποιεί Google Cloud Functions και περιορίζεται σε 60 δευτερόλεπτα για συναρτήσεις συμβάντων. Το Firebase συνιστά τα νέα έργα να ξεκινούν με 2nd gen.

Μπορώ να χρησιμοποιήσω Python αντί για JavaScript;

Το Firebase Cloud Functions υποστηρίζει επίσημα μόνο Node.js (JavaScript και TypeScript). Για Python χρησιμοποιήστε απευθείας το Google Cloud Functions με το Firebase Admin SDK για Python. Το Firebase Admin SDK Python υποστηρίζει όλες τις λειτουργίες, εκτός από ορισμένους ενεργοποιητές ειδικούς για Firebase, που είναι διαθέσιμοι μόνο μέσω Node.js.

Πώς να προστατεύσω τη συνάρτηση HTTPS από μη εξουσιοδοτημένη πρόσβαση;

Για εξουσιοδοτημένη πρόσβαση ελέγξτε το token Firebase ID στην επικεφαλίδα Authorization: admin.auth().verifyIdToken(token). Για ενσωμάτωση server-to-server χρησιμοποιήστε Firebase Admin SDK με λογαριασμό υπηρεσίας ή κλειδιά API. Για δημόσια τελικά σημεία με περιορισμό ταχύτητας χρησιμοποιήστε rate limiting μέσω Cloud Armor ή middleware.

Συμπεράσματα

  • Firebase Cloud Functions — πλατφόρμα χωρίς διακομιστή για εκτέλεση κώδικα ως απάντηση σε συμβάντα Firebase και αιτήματα HTTPS.
  • Ενεργοποιητές υποστηρίζονται για Firestore, Authentication, Storage, Realtime Database, Pub/Sub και HTTPS.
  • Ψυχρή εκκίνηση — το κύριο μειονέκτημα: καθυστέρηση έως 2 δευτερόλεπτα στην πρώτη κλήση μετά από αδράνεια, επιλύεται με minInstances.
  • Κλιμάκωση γίνεται αυτόματα έως 3000 παράλληλες περιπτώσεις, πληρωμή — για πραγματική εκτέλεση.
  • Ανάπτυξη σε JavaScript/TypeScript με τοπική δοκιμή μέσω Firebase Emulator Suite.
  • Ο κώδικας της συνάρτησης ακολουθεί το μοτίβο ενιαίας ευθύνης: μία συνάρτηση — ένας τύπος συμβάντος.
  • Ασφάλεια δεδομένων διαμόρφωσης διασφαλίζεται μέσω functions.config() ή Secret Manager Google Cloud.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης