Catch up on everthing we announced at this year's Firebase Summit. Learn more

Zacznij: pisz, testuj i wdrażaj swoje pierwsze funkcje

Aby rozpocząć korzystanie z Cloud Functions, wypróbuj ten samouczek, który rozpoczyna się od wymaganych zadań konfiguracyjnych i obejmuje tworzenie, testowanie i wdrażanie dwóch powiązanych funkcji:

  • addMessage() , co naraża URL, który przyjmuje wartość tekstową i zapisuje je do Cloud FireStore.
  • makeUppercase() , która wyzwala on cloud FireStore zapisu i przekształca tekst na wielkie litery.

Wybraliśmy Chmura FireStore i HTTP-wyzwalanych funkcji JavaScript dla tej próbki częściowo dlatego, że te wyzwalacze tła można dokładnie przetestowany przez Firebase Lokalnej Emulator Suite . Ten zestaw narzędzi obsługuje również wyzwalacze wywoływane Bazy danych czasu rzeczywistego, PubSub, Auth i HTTP. Inne rodzaje wyzwalaczy w tle, takie jak Remote Config Testlab i wyzwalaczy Analytics mogą być wszystkie badane interaktywnie za pomocą zestawy narzędzi nie opisane na tej stronie.

W poniższych sekcjach tego samouczka szczegółowo opisano kroki wymagane do skompilowania, przetestowania i wdrożenia przykładu. Jeśli chcesz tylko uruchomić kod i sprawdzić go, skok do przeglądu kodu kompletne próbki .

Utwórz projekt Firebase

  1. W konsoli Firebase , kliknij przycisk Dodaj projekt.

    • Aby dodać zasoby Firebase do istniejącego projektu Google Cloud, wprowadź swoją nazwę projektu lub wybrać go z menu rozwijanego.

    • Aby utworzyć nowy projekt, wprowadź żądaną nazwę projektu. Możesz również opcjonalnie edytować identyfikator projektu wyświetlany pod nazwą projektu.

  2. Jeśli zostanie wyświetlony monit, przejrzeć i zaakceptować warunki Firebase .

  3. Kliknij Kontynuuj.

  4. (Opcjonalnie) skonfigurować Google Analytics dla swojego projektu, który pozwala mieć doświadczenie optymalną korzystając z jednej z następujących produktów Firebase:

    Albo wybierz istniejący konto Google Analytics lub utworzyć nowe konto.

    Jeśli utworzysz nowe konto, wybrać swoje Analytics raportowanie lokalizacji , a następnie zaakceptować ustawienia udostępniania danych i warunki Google Analytics dla swojego projektu.

  5. Kliknij przycisk Utwórz projekt (lub Dodaj Firebase, jeśli używasz istniejący projekt Google Cloud).

Firebase automatycznie udostępnia zasoby dla Twojego projektu Firebase. Po zakończeniu procesu zostaniesz przeniesiony na stronę przeglądu projektu Firebase w konsoli Firebase.

Skonfiguruj Node.js i Firebase CLI

Będziesz potrzebował node.js środowiska do funkcji zapisu, a będziesz potrzebować Firebase CLI do funkcji zainstalować na funkcje Chmura starcie. Do montażu node.js i KMP , węzeł Menedżer wersji jest zalecane.

Gdy masz node.js i NPM zainstalowane, zainstaluj Firebase CLI poprzez preferowanej metody. Aby zainstalować CLI przez npm, użyj:

npm install -g firebase-tools

Spowoduje to zainstalowanie dostępnego na całym świecie polecenia firebase. Jeśli polecenie nie powiedzie się, być może trzeba zmienić uprawnienia KMP . Aktualizację do najnowszej wersji firebase-tools , uruchom ponownie to samo polecenie.

Zainicjuj swój projekt

Podczas inicjowania pakietu SDK Firebase dla Cloud Functions tworzysz pusty projekt zawierający zależności i minimalny przykładowy kod, a do tworzenia funkcji wybierasz TypeScript lub JavaScript. Na potrzeby tego samouczka musisz też zainicjować Cloud Firestore.

Aby zainicjować swój projekt:

  1. Uruchom firebase login zalogować się za pomocą przeglądarki i uwierzytelnienia Firebase narzędzia.
  2. Przejdź do katalogu projektu Firebase.
  3. Run firebase init firestore . W tym samouczku możesz zaakceptować wartości domyślne po wyświetleniu monitu o reguły Firestore i pliki indeksu. Jeśli nie korzystałeś Chmura FireStore w tym projekcie jeszcze, będzie trzeba także wybrać tryb początkowy i lokalizację FireStore jak opisano w Zacząć z chmurą FireStore .
  4. Run firebase init functions . Narzędzie daje możliwość zainstalowania zależności z npm. Jest bezpieczny spadać jeśli chcesz zarządzać zależnościami w inny sposób, choć jeśli nie spadnie trzeba uruchomić npm install przed emulacji lub rozmieszczanie swoich funkcji.
  5. Narzędzie oferuje dwie opcje obsługi języków:

    W tym tutorialu, wybierz JavaScript.

Po pomyślnym zakończeniu tych poleceń struktura projektu wygląda tak:

myproject
 +- .firebaserc    # Hidden file that helps you quickly switch between
 |                 # projects with `firebase use`
 |
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # main source file for your Cloud Functions code
      |
      +- node_modules/ # directory where your dependencies (declared in
                       # package.json) are installed

package.json plik utworzony podczas inicjalizacji zawiera ważny klucz: "engines": {"node": "10"} . Określa wersję Node.js do pisania i wdrażania funkcji. Można wybrać inne wersje obsługiwane .

Zaimportuj wymagane moduły i zainicjuj aplikację

Po zakończeniu zadań konfiguracyjnych możesz otworzyć katalog źródłowy i rozpocząć dodawanie kodu zgodnie z opisem w poniższych sekcjach. W tym przykładzie, projekt musi importować Funkcje chmurze i modułów Admin SDK za pomocą węzła require oświadczenia. Dodaj linie jak poniżej do index.js pliku:

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

Linie te załadować firebase-functions i firebase-admin modułów i zainicjować admin instancję aplikacji, z której można dokonać zmiany Chmura FireStore. Gdziekolwiek Admin SDK wsparcie jest dostępne, ponieważ jest to dla FCM, uwierzytelnianie i Firebase Realtime bazie, zapewnia silny sposób na integrację Firebase użyciu funkcji Cloud.

Firebase CLI automatycznie instaluje moduły Firebase i Firebase SDK dla Cloud Functions Node podczas inicjowania projektu. Aby dodać bibliotek 3rd party do projektu, można zmodyfikować package.json i uruchomić npm install . Aby uzyskać więcej informacji, zobacz Zależności rączką .

Dodaj addMessage() funkcji

Dla addMessage() funkcji, dodać te linie do index.js :

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

addMessage() funkcja HTTP końcowego. Każdy wniosek do wyników końcowych w ExpressJS stylu Zamówienie i Response obiekty przekazane do onRequest() zwrotnego.

Funkcje HTTP są synchroniczne (podobna do funkcji płatnych na żądanie ), więc należy wysłać odpowiedź jak najszybciej i odłożenia prac z użyciem Chmura FireStore. addMessage() HTTP funkcja przechodzi wartość tekstową do punktu końcowego HTTP i wstawia go do bazy danych w ścieżce /messages/:documentId/original .

Dodaj makeUppercase() funkcja

Dla makeUppercase() funkcji, dodać te linie do index.js :

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

W makeUppercase() Wykonuje funkcję, gdy Chmura Firestore jest zapisywany. ref.set Funkcja określa dokument, który ma nasłuchiwać. Ze względu na wydajność powinieneś być jak najbardziej konkretny.

Szelki, na przykład, {documentId} -surround „parametry” literowych które narażają ich dopasowaniu dane zwrotnego.

Chmura Firestore wyzwala onWrite() oddzwanianie, gdy dane są zapisywane lub zaktualizowane w danym dokumencie.

Funkcje sterowane zdarzeniami, takie jak zdarzenia Cloud Firestore, są asynchroniczne. Funkcja zwrotna powinna powrócić albo null , obiektem, lub Obietnicę . Jeśli nic nie zwrócisz, funkcja przekroczy limit czasu sygnalizując błąd i zostanie ponowiona. Zobacz Sync, asynchroniczny i obiecuje .

Emuluj wykonywanie swoich funkcji

Firebase Local Emulator Suite pozwala na budowanie i testowanie aplikacji na lokalnym komputerze zamiast wdrażania projektu Firebase. Zdecydowanie zaleca się testowanie lokalne podczas opracowywania, po części dlatego, że zmniejsza to ryzyko błędów kodowania, które mogą potencjalnie generować koszty w środowisku produkcyjnym (na przykład nieskończona pętla).

Aby emulować swoje funkcje:

  1. Uruchom firebase emulators:start i sprawdzić wyjście do adresu URL emulatora Suite UI. Domyślnie jest to localhost: 4000 , ale może znajdować się na innym porcie na komputerze. Wprowadź ten adres URL w przeglądarce, aby otworzyć interfejs użytkownika pakietu emulatorów.

  2. Sprawdź wyjście z firebase emulators:start polecenie URL funkcji HTTP addMessage() . Będzie to wyglądać podobnie do http://localhost:5001/MY_PROJECT/us-central1/addMessage , z wyjątkiem:

    1. MY_PROJECT zostanie zastąpiony identyfikatorem projektu.
    2. Port może być inny na twoim lokalnym komputerze.
  3. Dodaj ciąg kwerendy ?text=uppercaseme na końcu adresu URL funkcji. Powinno to wyglądać mniej więcej tak: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . Opcjonalnie możesz zmienić wiadomość „wielkie litery” na wiadomość niestandardową.

  4. Utwórz nową wiadomość, otwierając adres URL w nowej karcie w przeglądarce.

  5. Zobacz efekty funkcji w interfejsie Emulator Suite:

    1. Na karcie Dzienniki, powinieneś zobaczyć nowe dzienniki wskazujące, że funkcje addMessage() i makeUppercase() ran:

      i funkcje: Rozpoczęcie wykonywania "addMessage"

      i funkcje: Rozpoczęcie wykonywania "makeUppercase"

    2. W zakładce FireStore, powinieneś zobaczyć dokument zawierający oryginalną wiadomość, jak również duże litery wersji wiadomości (jeśli to było pierwotnie „uppercaseme”, zobaczysz „UPPERCASEME”).

Wdrażaj funkcje w środowisku produkcyjnym

Gdy funkcje działają zgodnie z wymaganiami w emulatorze, możesz przystąpić do wdrażania, testowania i uruchamiania ich w środowisku produkcyjnym. Należy pamiętać, że aby wdrożyć do zalecanej node.js 14 środowisku wykonawczym, projekt musi być na planie cenowej Blaze . Zobacz Chmura Funkcje cen .

Aby ukończyć kurs, wdrożyć swoje funkcje, a następnie wykonać addMessage() , aby wywołać makeUppercase() .

  1. Uruchom to polecenie, aby wdrożyć swoje funkcje:

    $ firebase deploy --only functions
    

    Po uruchomieniu tego polecenia interfejs wiersza polecenia Firebase wyświetla adres URL dla wszystkich punktów końcowych funkcji HTTP. W twoim terminalu powinieneś zobaczyć linię podobną do następującej:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    Adres URL zawiera identyfikator projektu oraz region funkcji HTTP. Chociaż nie trzeba się martwić o to teraz, niektóre funkcje HTTP produkcja powinna określić lokalizację , aby zminimalizować opóźnienia sieci.

    W przypadku napotkania błędów dostępu, takich jak „Nie można zezwolić na dostęp do projektu”, spróbuj sprawdzania aliasing projektu .

  2. Korzystanie z addMessage() wyjście URL przez CLI, dodaj parametr zapytania tekst i otworzyć go w przeglądarce:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    Funkcja wykonuje i przekierowuje przeglądarkę do konsoli Firebase w lokalizacji bazy danych, w której przechowywany jest ciąg tekstowy. To zdarzenie zapisu wyzwala makeUppercase() , która zapisuje wielką wersję napisu.

Po wdrożeniu i wykonywania funkcji, można wyświetlić dzienniki w konsoli Firebase dla funkcji chmurze . Jeśli trzeba usunąć funkcje w rozwoju lub produkcji, użyj Firebase CLI.

W środowisku produkcyjnym można zoptymalizować wydajność funkcji i kontrolować koszty, ustawiając minimalną i maksymalną liczbę wystąpień do uruchomienia. Zobacz zachowania skalowania sterowania , aby uzyskać więcej informacji na temat tych opcji uruchomieniowych.

Przejrzyj kompletny przykładowy kod

Oto wypełnione functions/index.js zawierające funkcje addMessage() i makeUppercase() . Te funkcje umożliwiają przekazanie parametru do punktu końcowego HTTP, który zapisuje wartość w Cloud Firestore, a następnie przekształca ją przez zapisanie wszystkich znaków w ciągu wielkimi literami.

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

Następne kroki

W tej dokumentacji, można znaleźć więcej informacji na temat ogólnych pojęć dla funkcji w chmurze, a także przewodników dla pisząc funkcje do obsługi typy zdarzeń obsługiwane przez funkcje Cloud.

Aby dowiedzieć się więcej o Cloud Functions, możesz też wykonać następujące czynności:

Instrukcja wideo

Możesz dowiedzieć się więcej o Cloud Functions, oglądając samouczki wideo. W tym filmie znajdziesz szczegółowe wskazówki dotyczące rozpoczynania pracy z Cloud Functions, w tym konfiguracji Node.js i CLI.