Google jest zaangażowany w promowanie równości rasowej dla społeczności czarnych. Zobacz jak.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

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() , która ujawnia adres URL akceptujący wartość tekstową i zapisuje ją w Cloud Firestore.
  • makeUppercase() , który uruchamia w Cloud Firestore zapis i przekształca tekst na wielkie litery.

W tym przykładzie wybraliśmy Cloud Firestore i funkcje JavaScript wyzwalane przez HTTP, częściowo dlatego, że te wyzwalacze działające w tle można dokładnie przetestować za pomocą pakietu Firebase Local Emulator Suite . Ten zestaw narzędzi obsługuje również wyzwalacze wywoływalne w bazie danych czasu rzeczywistego, PubSub, Auth i HTTP. Inne typy wyzwalaczy w tle, takie jak wyzwalacze Zdalna konfiguracja, TestLab i Analytics, można testować interaktywnie za pomocą zestawów narzędzi nieopisanych na tej stronie.

W poniższych sekcjach tego samouczka opisano szczegółowo kroki wymagane do kompilowania, testowania i wdrażania przykładu. Jeśli wolisz po prostu uruchomić kod i sprawdzić go, przejdź do Przejrzyj cały przykładowy kod .

Utwórz projekt Firebase

  1. W konsoli Firebase kliknij Dodaj projekt , a następnie wybierz lub wprowadź nazwę projektu .

    Jeśli masz istniejący projekt Google Cloud Platform (GCP), możesz wybrać projekt z menu rozwijanego, aby dodać zasoby Firebase do tego projektu.

  2. (Opcjonalnie) Jeśli tworzysz nowy projekt, możesz edytować identyfikator projektu .

    Firebase automatycznie przypisuje unikalny identyfikator do Twojego projektu Firebase. Odwiedź artykuł Omówienie projektów Firebase, aby dowiedzieć się, jak Firebase używa identyfikatora projektu.

  3. Kliknij Kontynuuj .

  4. (Opcjonalnie) Skonfiguruj Google Analytics dla swojego projektu, co zapewni optymalne wrażenia z korzystania z następujących usług Firebase:

    Po wyświetleniu monitu wybierz, czy chcesz użyć istniejącego konta Google Analytics, czy utworzyć nowe konto.
    Jeśli zdecydujesz się utworzyć nowe konto, wybierz lokalizację raportowania Analytics , a następnie zaakceptuj ustawienia udostępniania danych i warunki Google Analytics dla swojego projektu.

  5. Kliknij Utwórz projekt (lub Dodaj Firebase , jeśli używasz istniejącego projektu GCP).

Firebase automatycznie zapewnia zasoby dla Twojego projektu Firebase. Po zakończeniu tego procesu przejdziesz do strony przeglądu projektu Firebase w konsoli Firebase.

Skonfiguruj Node.js i Firebase CLI

Będziesz potrzebować środowiska Node.js do pisania funkcji, a do wdrażania funkcji w środowisku wykonawczym Cloud Functions będzie potrzebny interfejs wiersza polecenia Firebase. Do instalowania Node.js i npm zalecany jest Node Version Manager .

Po zainstalowaniu Node.js i npm zainstaluj interfejs wiersza polecenia Firebase za pomocą preferowanej metody. Aby zainstalować CLI przez npm, użyj:

 npm install -g firebase-tools
 

Spowoduje to zainstalowanie globalnie dostępnego polecenia Firebase. Jeśli polecenie nie powiedzie się, może być konieczna zmiana uprawnień npm . Aby zaktualizować firebase-tools do najnowszej wersji, uruchom ponownie to samo polecenie.

Zainicjuj pakiet SDK Firebase dla funkcji Cloud

Podczas inicjowania pakietu Firebase SDK for Cloud Functions tworzysz pusty projekt zawierający zależności i minimalny przykładowy kod oraz wybierasz TypeScript lub JavaScript do tworzenia funkcji.

Aby zainicjować projekt:

  1. Uruchom firebase login do firebase login aby zalogować się przez przeglądarkę i uwierzytelnić narzędzie Firebase.
  2. Przejdź do katalogu projektu Firebase.
  3. Uruchamiaj firebase init functions . Narzędzie umożliwia zainstalowanie zależności przy użyciu npm. Odmowa jest bezpieczna, jeśli chcesz zarządzać zależnościami w inny sposób, ale jeśli odmówisz, musisz uruchomić npm install przed emulacją lub wdrożeniem funkcji.
  4. Narzędzie oferuje dwie opcje obsługi języków:

    W tym samouczku wybierz JavaScript .

Po pomyślnym wykonaniu tych poleceń struktura projektu wygląda następująco:

 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
 

Plik package.json utworzony podczas inicjalizacji zawiera ważny klucz: "engines": {"node": "8"} . Określa wersję węzła do pisania i wdrażania funkcji. Możesz wybrać inne obsługiwane wersje .

Zaimportuj wymagane moduły i zainicjuj aplikację

Po wykonaniu zadań konfiguracyjnych możesz otworzyć katalog źródłowy i rozpocząć dodawanie kodu zgodnie z opisem w poniższych sekcjach. W tym przykładzie Twój projekt musi zaimportować moduły Cloud Functions i Admin SDK przy użyciu instrukcji Node require . Dodaj wiersze, takie jak poniższe, do index.js :

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

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

Te linie ładują moduły firebase-functions i firebase-admin oraz inicjują instancję aplikacji admin z której można wprowadzać zmiany w Cloud Firestore. Wszędzie tam, gdzie jest dostępna obsługa pakietu Admin SDK , tak jak w przypadku FCM, uwierzytelniania i bazy danych czasu rzeczywistego Firebase, zapewnia ona skuteczny sposób integracji Firebase przy użyciu Cloud Functions.

Interfejs wiersza polecenia Firebase automatycznie instaluje moduły Firebase i Firebase SDK dla węzłów Cloud Functions, gdy inicjujesz projekt. Aby dodać biblioteki innych firm do swojego projektu, możesz zmodyfikować package.json i uruchomić npm install . Aby uzyskać więcej informacji, zobacz Obsługa zależności .

Dodaj funkcję addMessage()

W przypadku funkcji addMessage() dodaj następujące wiersze do index.js :

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Cloud 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 Cloud Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've succesfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

Funkcja addMessage() jest punktem końcowym HTTP. Każde żądanie skierowane do punktu końcowego skutkuje przekazaniem obiektów Request i Response w stylu ExpressJS do wywołania zwrotnego onRequest() .

Funkcje HTTP są synchroniczne (podobnie jak funkcje wywoływalne ), dlatego należy wysłać odpowiedź tak szybko, jak to możliwe i odroczyć pracę przy użyciu Cloud Firestore. Funkcja HTTP addMessage() przekazuje wartość tekstową do punktu końcowego HTTP i wstawia ją do bazy danych w ścieżce /messages/:documentId/original .

Dodaj funkcję makeUppercase()

W przypadku funkcji makeUppercase() dodaj następujące wiersze 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 Cloud 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 Cloud Firestore.
      // Setting an 'uppercase' field in Cloud Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

Funkcja makeUppercase() jest wykonywana podczas zapisywania do Cloud Firestore. Funkcja ref.set definiuje dokument do nasłuchiwania. Ze względu na wydajność powinieneś być jak najbardziej szczegółowy.

Nawiasy - na przykład {documentId} —surround "parameters", symbole wieloznaczne, które ujawniają swoje dopasowane dane w wywołaniu zwrotnym.

Cloud Firestore wyzwala wywołanie zwrotne onWrite() za każdym razem, gdy dane są zapisywane lub aktualizowane w danym dokumencie.

Funkcje sterowane zdarzeniami, takie jak zdarzenia Cloud Firestore, są asynchroniczne. Funkcja zwrotna powinna zwrócić null , Object lub Promise . Jeśli nic nie zwrócisz, funkcja przekroczy limit czasu, sygnalizując błąd, i zostanie ponowiona. Zobacz Synchronizacja, asynchronizacja i obietnice .

Emuluj wykonywanie swoich funkcji

Pakiet Firebase Local Emulator Suite umożliwia tworzenie i testowanie aplikacji na komputerze lokalnym zamiast wdrażania ich w projekcie Firebase. Zdecydowanie zaleca się lokalne testowanie podczas programowania, po części dlatego, że zmniejsza to ryzyko błędów kodowania, które mogą potencjalnie pociągać za sobą koszty w środowisku produkcyjnym (na przykład nieskończona pętla).

Aby emulować swoje funkcje:

  1. Uruchom firebase emulators:start i sprawdź w danych wyjściowych adres URL interfejsu użytkownika pakietu emulatorów. Domyślnie jest to localhost: 4000 , ale może być hostowany na innym porcie na twoim komputerze. Wprowadź ten adres URL w przeglądarce, aby otworzyć interfejs użytkownika pakietu emulatora.

  2. Sprawdź dane wyjściowe firebase emulators:start polecenie firebase emulators:start dla adresu URL funkcji http addMessage() . Będzie wyglądać podobnie do http://localhost:5001/MY_PROJECT/us-central1/addMessage , z tą różnicą, że:

    1. MY_PROJECT zostanie zastąpiony Twoim identyfikatorem projektu.
    2. Port może być inny na komputerze lokalnym.
  3. Dodaj ciąg zapytania ?text=uppercaseme na końcu adresu URL funkcji. Powinien teraz wyglądać http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme tak: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . Opcjonalnie możesz zmienić wiadomość „uppercaseme” na wiadomość niestandardową.

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

  5. Zobacz efekty funkcji w interfejsie użytkownika pakietu emulatora:

    1. W zakładce Logs powinieneś zobaczyć nowe logi wskazujące, że funkcje addMessage() i makeUppercase() działały:

      Funkcje i: rozpoczęcie wykonywania funkcji „addMessage”

      Funkcje i: rozpoczęcie wykonywania polecenia „makeUppercase”

    2. Na karcie Firestore powinien pojawić się dokument zawierający oryginalną wiadomość, a także wersję wiadomości zapisaną wielkimi literami (jeśli pierwotnie była to „uppercaseme”, zobaczysz „WIELKIE LITERY”).

Wdrażaj funkcje w środowisku produkcyjnym

Gdy funkcje będą działały zgodnie z oczekiwaniami w emulatorze, możesz przystąpić do ich wdrażania, testowania i uruchamiania w środowisku produkcyjnym. Pamiętaj, że aby wdrożyć w zalecanym środowisku wykonawczym Node.js 10, Twój projekt musi być objęty planem rozliczeniowym Blaze pay-as-you-go. Zobacz cennik Cloud Functions .

Aby ukończyć samouczek, wdróż swoje funkcje, a następnie wykonaj 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 wyprowadza adres URL dla wszystkich punktów końcowych funkcji HTTP. W terminalu powinieneś zobaczyć linię podobną do poniższej:

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

    Adres URL zawiera identyfikator projektu, a także region dla funkcji HTTP. Chociaż nie musisz się tym teraz martwić, niektóre produkcyjne funkcje HTTP powinny określać lokalizację, aby zminimalizować opóźnienia w sieci.

    Jeśli napotkasz błędy dostępu, takie jak „Nie można autoryzować dostępu do projektu”, spróbuj sprawdzić aliasy projektu .

  2. Korzystając z addMessage() wyjściowych adresu URL addMessage() przez CLI, dodaj parametr zapytania tekstowego i otwórz 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 wersję łańcucha makeUppercase() wielkimi literami.

Po wdrożeniu i wykonaniu funkcji możesz przeglądać dzienniki w konsoli Firebase dla Cloud Functions . Jeśli chcesz usunąć funkcje w fazie rozwoju lub produkcji, użyj interfejsu wiersza polecenia Firebase.

Przejrzyj cały przykładowy kod

Oto kompletne 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ą, dodając wielkie litery do wszystkich znaków w ciągu.

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

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

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Cloud 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 Cloud Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've succesfully 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 Cloud 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 Cloud Firestore.
      // Setting an 'uppercase' field in Cloud Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

Następne kroki

W tej dokumentacji można znaleźć więcej informacji o ogólnych koncepcjach dotyczących Cloud Functions, a także przewodniki dotyczące pisania funkcji obsługujących typy zdarzeń obsługiwane przez Cloud Functions.

Aby dowiedzieć się więcej o funkcjach chmury, możesz również wykonać następujące czynności:

Instrukcja wideo

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