Firebase Serverless nutzen – Mobil- und Webanwendungen leicht gemacht

Veröffentlicht: 2022-03-11

Mobil- und Webanwendungen erfordern normalerweise einen Back-End-Server. Webanwendungen benötigen einen Webserver, um Inhalte bereitzustellen. Anwendungen müssen auch Benutzerprofile und Medien wie Bilder und Videos speichern. Die Kommunikation zwischen der Anwendung und dem Server erfolgt häufig über eine API, die normalerweise REST ist.

Anwendungen sind in einer Reihe von Sprachen kodiert. Eine iOS-Anwendung ist in Swift oder Objective-C geschrieben. Android-Anwendungen sind in Java oder Kotlin geschrieben. Webanwendungen werden in HTML, CSS, JavaScript und oft komplexen Frameworks wie Angular oder React geschrieben. Frontend-Entwickler müssen die relevanten Sprachen und die zugehörigen Entwicklungstools kennen.

Back-End-Server sind in einer Reihe von Sprachen geschrieben, darunter Go, Java, PHP und Python. Jede dieser Sprachen hat ihre eigene Sammlung von Bibliotheken, um das Schreiben komplexer Anwendungen zu erleichtern.

Die meisten Entwickler betrachten sich selbst als Front-End- oder Back-End-Entwickler. Full-Stack-Entwickler, die beide Rollen beherrschen, sind relativ selten.

Das Betreiben und Warten eines Back-End-Servers hat seine eigenen Herausforderungen. Server müssen erstellt, aktualisiert und gesichert werden. Server müssen auch gesichert werden, um versehentlichen oder böswilligen Datenverlust oder Zugriff auf sensible Daten zu verhindern. Darüber hinaus müssen Servern Hostnamen und IP-Adressen zugewiesen werden, damit sie verbunden werden können.

Was ist Firebase?

Firebase begann als mobile Messaging-Architektur, die von Google übernommen wurde. Seitdem hat es sich zu einer Suite von mehr als 25 Komponenten entwickelt, die mit der Google Cloud Platform zusammenarbeiten.

Firebase besteht aus Software Development Kits (SDKs), die es Mobil- und Webentwicklern ermöglichen, einfach, sicher und zuverlässig auf Cloud-Funktionen zuzugreifen. Sie kompensieren automatisch eine schlechte Netzwerkverbindung. Es gibt eine Firebase-Webkonsole zum Aktivieren, Verwalten und Sichern von Komponenten. Es gibt auch Befehlszeilentools und REST-APIs für eine tiefergehende Nutzung.

Einige Firebase-Komponenten sind bekannter als andere. Es gibt nur wenige Abhängigkeiten zwischen den Komponenten, was eine schrittweise Übernahme der Funktionalität ermöglicht. Firebase-Authentifizierung und -Analyse werden am häufigsten verwendet.

Firebase hat sich zu einer Plattform entwickelt, die es Mobile- und Web-Front-End-Entwicklern ermöglicht, vollständige Anwendungen zu entwickeln, ohne dass Back-End-Server erforderlich sind. Jüngste Verbesserungen haben serverlose Lösungen erheblich erleichtert, die eine praktikable, skalierbare und kostengünstige Alternative zu Cloud Virtual Machine-Serverlösungen bieten.

Preis- und Abrechnungspläne für Firebase

Der grundlegende Firebase-Abrechnungsplan namens Spark ist kostenlos. Es gibt Grenzen für die Nutzung von Cloud-Ressourcen, aber sie sind recht großzügig. Es ist möglich, eine Anwendung in angemessener Größe auszuführen, ohne dass Gebühren anfallen.

Eine Website mit bis zu 1 GB Inhalt und Übertragungen von weniger als 10 GB/Monat kann im Spark-Plan gehostet werden. Firestore erlaubt bis zu 1 GB Daten und Netzwerkverkehr von bis zu 10 GB/Monat. Cloud-Speicherlimits sind bis zu 5 GB Daten und Downloads von bis zu 1 GB/Tag.

Wenn die Anwendung mehr Ressourcen benötigt, ist ein kostenpflichtiger Abrechnungsplan wie Pay As You Go erforderlich. Die kostenlosen Limits des Spark-Plans gelten weiterhin. Die anrechenbaren Gebühren sind recht gering. Die Preise finden Sie auf der Firebase-Preisseite.

Für virtuelle Maschinen, die in der Cloud ausgeführt werden, fallen Gebühren an, während sie ausgeführt werden, selbst wenn sie nicht verwendet werden. Serverlose Firebase-Lösungen werden auf null skaliert. Das bedeutet, dass Ressourcen effektiv nur dann ausgeführt werden, wenn sie verwendet werden, und keine Gebühren anfallen, wenn sie nicht verwendet werden. Dies ist ideal für Anwendungen für saisonale Geschäfte wie Ferienvermietung oder periodische Veranstaltungen wie Konzerte. Auf viele Aktivitäten folgten Monate der Inaktivität.

So richten Sie Firebase ein

Für die Authentifizierung ist ein E-Mail-Konto erforderlich. Ein Google-Mail-Konto wird bevorzugt. Sie können unter https://mail.google.com erstellt werden.

Ein Google Cloud Platform (GCP)-Konto ist ebenfalls erforderlich. Eine kostenlose Testversion ist hier verfügbar. Dadurch erhalten Sie ein Guthaben von 300 USD, das ein Jahr lang verfügbar ist. Als Identitätsnachweis wird eine Kreditkarte benötigt. Google kann 1 US-Dollar berechnen und diesen dann erstatten. Die Kreditkarte wird monatlich belastet, wenn die Abrechnung aktiviert ist und abrechenbare Ressourcen verwendet werden. Es gibt auch Google-Provider-Unternehmen, die als Vermittler für die Abrechnung fungieren. Sie bezahlen den Anbieter für die Cloud-Nutzung und er bezahlt Google. Sie haben ihre eigenen Abrechnungspläne und bieten möglicherweise eine kostenlose Testversion an.

Es ist wichtig, den Abrechnungsbereich der Cloud-Konsole häufig zu überwachen, um die Nutzung zu überwachen. Es ist einfach, Ressourcen wie Speicher aktiv zu halten, wenn sie nicht benötigt werden, was im Laufe der Zeit erhebliche Kosten verursachen kann.

Firebase-Projekte sind auch GCP-Projekte. Sie können ein GCP-Projekt erstellen und es in Firebase importieren oder ein Firebase-Projekt erstellen, das auch ein GCP-Projekt erstellt. Die Firebase-Konsole ist da.

Für unterschiedliche Arten von Anwendungen ist eine unterschiedliche Einrichtung erforderlich. Die wichtigsten sind Android-, iOS- und Webanwendungen. Die Einrichtungsanleitung finden Sie in den offiziellen Firebase Guides.

Für einige Vorgänge sind die Tools der Firebase-Befehlszeilenschnittstelle (CLI) erforderlich. Diese setzen voraus, dass Node.js und das Tool npm installiert sind. Bei Ausführung unter macOS oder Linux muss der Befehl npm mit sudo ausgeführt werden.

sudo npm install -g firebase-tools

Authentifizierung und Autorisierung

Die Firebase-Authentifizierung ist vielleicht die am weitesten verbreitete Firebase-Komponente. Benutzer können einen oder mehrere Authentifizierungsmechanismen auswählen. Dies sind E-Mail-Adresse und Passwort, Telefonnummern und die föderierten Identitätsanbieter Google, Facebook, Twitter und GitHub. Es können beliebig viele Authentifizierungsmechanismen aktiviert werden.

Die Firebase-Benutzeroberfläche fordert den Benutzer auf, den zu verwendenden Mechanismus anzugeben:

Firebase-Authentifizierung

Firebase bietet Benutzeroberflächen für die Authentifizierung, die auf Clientseite mit wenigen Codezeilen aufgerufen werden können. Es gibt auch APIs für die manuelle Authentifizierung. Bei erfolgreicher Authentifizierung wird ein Identitätstoken generiert, das für die Back-End-Validierung verwendet werden kann.

Die APIs ermöglichen Verwaltungsbenutzern, Benutzer programmgesteuert zu verwalten. Zu den Operationen gehören:

  • Erstellen, Aktualisieren und Löschen von Benutzern
  • Suchen Sie Benutzer anhand von Suchkriterien wie E-Mail-Adresse oder Telefonnummer
  • Greifen Sie auf Informationen wie das Erstellungsdatum des Kontos und Datum und Uhrzeit der letzten Anmeldung zu
  • Validieren Sie E-Mail-Adressen und Telefonnummern, ohne die bestehenden Workflows verwenden zu müssen

Die meisten Mobil- und Webanwendungen möchten, dass sich eine große Anzahl von Benutzern bei ihren Anwendungen anmeldet. Beispielsweise kann sich jeder mit einem Google Mail-Konto bei jeder Anwendung authentifizieren, die eine Google-Authentifizierung zulässt. Eine Form der Autorisierung ist erforderlich, um den Zugriff auf die Anwendung auf bestimmte Benutzer zu beschränken. Dies lässt sich leicht bewerkstelligen, indem Zuordnungen zwischen E-Mail-Adressen und Zugriffsrollen in der Datenspeicherung gespeichert werden. Bei erfolgreicher Authentifizierung wird die E-Mail-Adresse im Datenspeicher nachgeschlagen. Wenn der Benutzer mit den richtigen Rollen vorhanden ist, wird der Zugriff gewährt; Andernfalls wird der Benutzer zwangsweise abgemeldet.

Firebase-Hosting

Firebase-Hosting ermöglicht das Hosten statischer Webinhalte, einschließlich JavaScript, in der Cloud, ohne dass ein Webserver erforderlich ist. Der Inhalt wird an den Rändern eines globalen Content Delivery Network (CDN) zwischengespeichert. Dies ermöglicht einen schnellen Zugriff auf die Inhalte von überall auf der Welt.

Eine oder mehrere Websites können gehostet werden, indem sie zum Abschnitt „Hosting“ eines Firebase-Projekts in der Firebase-Konsole hinzugefügt werden. Der Inhalt wird über SSL bereitgestellt und erhält zwei URLs der Form [https://site-name.web.app] und https://site-name.firebaseapp.com, wobei site-name entweder der Projektname oder a ist benutzerdefinierter Site-Name.

Es ist sehr einfach, die Website unter Ihrem eigenen Domainnamen zu hosten, vorausgesetzt, Sie können die DNS-Einträge für die Domain ändern. Sie fügen Ihren Domainnamen zu einer Website in der Firebase-Konsole hinzu. Sie erhalten dann einen DNS-TXT-Eintrag, den Sie dem DNS Ihrer Domain hinzufügen müssen, um Google zu beweisen, dass Sie der Eigentümer der Domain sind. Sobald der TXT-Eintrag sichtbar ist, können Sie DNS-A-Einträge für die Site abrufen. Für die Site wird automatisch ein SSL-Zertifikat bereitgestellt. Sobald das Zertifikat bereitgestellt wurde, ist die Site global verfügbar. DNS-Updates und Zertifikatsbereitstellung können im Prinzip mehrere Stunden dauern. In der Praxis kann der Vorgang in 20 Minuten abgeschlossen werden.

Um Inhalte zum Hosting hinzuzufügen, erstellen Sie zunächst ein Verzeichnis für die Site und cd Sie über die Befehlszeile in dieses Verzeichnis. Melden Sie sich als Nächstes bei Firebase an und initialisieren Sie das Projektverzeichnis.

 firebase login firebase init

Sie werden aufgefordert, ein Projekt und die erforderlichen Client-Services auszuwählen. Dienste können jederzeit nachträglich hinzugefügt werden und müssen zu diesem Zeitpunkt noch nicht ausgewählt werden.

Erstellen Sie eine Datei namens firebase.json , die das Stammverzeichnis der Website und die auszuschließenden Dateien definiert. Sie benötigen außerdem eine .gitignore -Datei, um Dateien von der Versionskontrolle auszuschließen.

 { "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }

Kopieren Sie dann den statischen Inhalt in das öffentliche Verzeichnis. Stellen Sie die Site schließlich in der Cloud bereit.

 firebase deploy

Um den Webinhalt zu ändern, ändern Sie einfach die Inhaltsdateien und führen Sie den Befehl deploy aus. Jede Bereitstellung wird als Version in der Firebase-Konsole angezeigt. Sie können mit einem einzigen Klick zu einer früheren Version zurückkehren.

Firebase Hosting kann auch URIs in Dateien, Cloud Functions und Cloud Run umschreiben. Dies vereinfacht die Arbeit erheblich, da diesen Diensten keine Domain zugewiesen werden muss. Die Rewrites werden definiert, indem dem Hosting-Abschnitt von firebase.json ein Rewrites-Abschnitt hinzugefügt wird. Die Hosting-Bereitstellung schlägt fehl, wenn der Dienst nicht vorhanden ist.

 { "hosting": { "public": "public", "rewrites": [ { "source": "/xxx", "destination": "/profile.html" }, { "source": "/yyy", "function": "profile" }, { "source": "/api{,/**}", "run": { "serviceId": "cloud-api", "region": "europe-west1" } } ] } }

Datenspeicher

Firebase bietet Client-APIs für den Zugriff auf Cloud-basierte Datenspeicher. Es gibt drei Speicherarten:

  • Echtzeit-Datenbank
  • Cloud-Firestore
  • Cloud-Speicher

Dadurch können mobile und Web-Clients Daten speichern und abrufen, ohne dass ein Server erforderlich ist.

Echtzeit-Datenbank

Realtime Database ist eine in der Cloud gehostete NoSQL-Datenbank. Daten in der Realtime Database werden automatisch in Echtzeit mit allen angeschlossenen Geräten synchronisiert. Es funktioniert plattformübergreifend für Android, iOS und das Web. Die Daten werden als JSON-Baumstruktur gespeichert. Sicherheitsregeln können festgelegt werden, um den Lese- und Schreibzugriff auf die Daten zu steuern.

Jedes Gerät behält eine lokale Kopie der Datenbank. Das bedeutet, dass die Daten verfügbar sind, wenn keine Verbindung zum Netzwerk besteht. Beim erneuten Verbinden werden die lokalen und cloudbasierten Kopien der Daten synchronisiert.

Die Daten werden von Anwendungen mit einem Listener gelesen. Ein Listener überwacht einen Knoten in der JSON-Struktur. Immer wenn die Daten auf der Konsole oder von einem anderen Benutzer geändert werden, wird der Listener-Callback mit dem neuen Datenwert aufgerufen. Realtime Database unterstützt auch Abfragen. Jede Abfrage gibt einen Knoten und alle seine untergeordneten Knoten zurück.

Die Sicherheitsregeln erlauben standardmäßig keinen Zugriff auf die Daten. Regeln können global oder zu einzelnen Knoten des JSON-Objekts hinzugefügt werden. Sicherheitsregeln steuern den Lese- und Schreibzugriff auf Daten und können eine Validierung durchführen.

Realtime Database eignet sich am besten für kleine Datenstücke, die keine tief verschachtelte Datenstruktur erfordern. Das kostenlose Limit beträgt 1 GB Daten.

Cloud-Firestore

Cloud Firestore wird als Ersatz für die Realtime Database angesehen. Es erweitert die Funktionalität von Realtime Database. Daten befinden sich nicht in einem JSON-Baum, sondern in einer hierarchischen Sammlung von Dokumenten. Jedes Dokument besteht aus einer Reihe von Schlüssel-Wert-Paaren und optionalen Unterdokumenten. Abfragen ermöglichen ein komplexeres Filtern und Sortieren und geben nur vollständige Dokumente zurück. Abfragen geben keine Unterdokumente zurück.

Cloud Firestore wird Cloud Datastore bald ersetzen. Es kann im Datastore-Modus oder im nativen Modus ausgeführt werden. Alle Datastore-Anwendungen werden automatisch zu Cloud Firestore migriert.

Cloud Firestore eignet sich am besten für relativ kleine Datenmengen. Es kann eine tief verschachtelte Datenstruktur haben. Das kostenlose Limit beträgt 1 GB Daten.

Cloud-Speicher

Cloud Storage dient zum Speichern von Dateien wie Bildern und Videoclips. Mobil- und Web-Clients können Firebase verwenden, um Dateien direkt in die und aus der Cloud hoch- und herunterzuladen, ohne dass ein Back-End-Server erforderlich ist. Das kostenlose Limit beträgt 5 GB Daten.

Cloud-Funktionen

Cloud-Funktionen sind eine wichtige Technologie zum Erstellen serverloser Anwendungen. Eine Cloud-Funktion kann in JavaScript, TypeScript, Python oder Go geschrieben werden, das direkt in der Google-Cloud bereitgestellt wird. Eine Funktion wird durch eine HTTP-Anfrage oder durch ein Ereignis in der Cloud ausgelöst, z. B. das Schreiben in Cloud Storage.

Eine Cloud-Funktion kann jeweils nur eine Anfrage verarbeiten, aber die Cloud skaliert die Funktion automatisch, indem sie sie repliziert. Eine in Python geschriebene Cloud-Funktion verwendet die Flask-Bibliothek, um HTTP-Anfragen zu verarbeiten. Die Funktion nimmt ein Anforderungsobjekt als Parameter und gibt den Antworttext zurück.

Eine einfache Python-Cloud-Funktion erfordert ein Arbeitsverzeichnis, und der Einstiegspunkt liegt in der Datei main.py .

 def simple_cloud_function(request): return "It worked"

Abhängigkeiten werden von pip verwaltet und gehen in eine Datei namens requirements.txt .

 Flask==1.0.2

Eine Funktion wird mithilfe des gcloud -Befehlszeilentools bereitgestellt. Es gibt den Funktionsnamen, die Sprache und den Trigger an.

 gcloud functions deploy simple_cloud_function --runtime python37 \ --trigger-http

Die URL für die Funktion wird bei der Bereitstellung angezeigt und kann durch Ausführen des Befehls "describe" gefunden werden.

 gcloud functions describe simple_cloud_function Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function

Cloud Functions kann Google Cloud- und Firebase-APIs aufrufen, um Back-End-Funktionen bereitzustellen. Sie liefern Protokollierungsinformationen über den Ausführungsstart und die Ausführungszeit. Zusätzliche Protokollierung kann einfach hinzugefügt werden. Die Logs können in der Stackdriver Logging-UI und über das gcloud -Befehlszeilentool angezeigt werden.

 gcloud functions logs read simple_cloud_function

Funktionen können in der Google Cloud Console angezeigt und gelöscht werden.

Google Cloud Console: Funktionen

Cloud Functions werden am besten für Vorgänge verwendet, die relativ selten vorkommen. Eine Beispielanwendung ist das Erstellen einer Miniaturansicht, wenn ein Bild in Cloud Storage hochgeladen wird. Das kostenlose Limit beträgt 125.000 Aufrufe pro Monat.

Cloud-Run

Cloud Run ist eine kürzlich hinzugefügte Funktionalität, die serverlose Anwendungen erheblich vereinfacht. Damit können Docker-Container in der Cloud ausgeführt werden, ohne dass eine komplexe Infrastruktureinrichtung erforderlich ist. Es kann im verwalteten Modus ausgeführt werden, der die Knative-Laufzeit verwendet, die auf Kubernetes basiert. Es kann auch auf Anthos ausgeführt werden, das ebenfalls auf Kubernetes basiert, aber die Ausführung von Containern über Clouds und sogar in Ihrem eigenen Rechenzentrum ermöglicht. Es ist nicht erforderlich, einen Kubernetes-Cluster einzurichten und zu verwalten, da dies alles automatisch erfolgt.

Jede Anwendung, die in Docker-Images integriert werden kann, kann von Cloud Run verwaltet werden. Es skaliert automatisch die Anzahl der Container basierend auf der Nachfrage. Es wird auch auf Null herunterskaliert, wenn der Dienst nicht verwendet wird. Für nicht genutzte Dienste fallen keine Gebühren an.

Die Docker-Container müssen einen Webserver ausführen, wenn sie auf HTTP-Anfragen antworten sollen. Der Python-Dienst verwendet Flask. Der Einstiegspunkt befindet sich in app.py .

 from flask import Flask, request app = Flask(__name__) @app.route('/api/profile') def profile(): page = ''' Page content ''' return page

Die Anwendung benötigt ein Dockerfile , um das Image zu erstellen.

 FROM python ENV APP_HOME /app WORKDIR $APP_HOME COPY . . ENV PORT 8080 RUN pip install Flask gunicorn firebase-admin CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app

Cloud Run-Container werden direkt in der Cloud bereitgestellt.

 gcloud run deploy --image=image_name --platform=managed \ --region=europe-west1 --allow-unauthenticated

Wenn der Dienstname, die Plattform, die Region oder ob nicht authentifiziert zugelassen werden soll, nicht in der Projektkonfiguration definiert oder in der Befehlszeile angegeben sind, werden sie dazu aufgefordert. Sobald die Bereitstellung abgeschlossen ist, wird die Dienst-URL angezeigt. Die URL kann auch mit dem gcloud-Befehl abgerufen werden.

 gcloud run services list SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z

Die URL enthält eine schwer zu verwaltende Zufallszahl. Hier werden Firebase Hosting-Umschreibungsregeln am nützlichsten.

Dienste können in der Google Cloud Console angezeigt und gelöscht werden.

Google Cloud Console: Dienste

Cloud Run eignet sich ideal zum Hosten einer REST-API. Die monatlichen kostenlosen Limits betragen 180.000 CPU-Sekunden, 360.000 GB-Sekunden Arbeitsspeicher, 2 Millionen Anfragen und 1 GB Netzwerkausgang. Das Limit für kostenlosen ausgehenden Netzwerkverkehr gilt nur, wenn der Dienst in einer nordamerikanischen Region bereitgestellt wird.

Authentifizierung

Standardmäßig sind Cloud Functions- und Cloud Run-Container öffentlich und für jeden im Internet zugänglich. Mithilfe von IAM-Regeln in der Cloud Console können die Dienste auf Projektmitglieder, Google-Gruppen und einzelne E-Mail-Adressen beschränkt werden.

Wenn Einschränkungen bestehen, ist der unbefugte Zugriff verboten. Um den Zugriff zu ermöglichen, muss den Anforderungsheadern ein Identitätstoken hinzugefügt werden. Das Identitätstoken kann mit dem gcloud-Befehl oder während des Firebase-Authentifizierungsprozesses abgerufen werden.

 gcloud auth print-identity-token

Ein Authorization-Header ist erforderlich.

 Authorization: Bearer id-token

Zusammenfassung

Google Cloud Platform und Firebase bieten eine Reihe von Produkten, die die Entwicklung von Mobil- und Webanwendungen erheblich erleichtern. Die Notwendigkeit eines Back-End-Servers kann vollständig eliminiert werden, indem Clients der direkte Zugriff auf Cloud-Funktionen ermöglicht wird oder indem Back-End-Code mithilfe von Cloud Functions oder Cloud Run in der Cloud bereitgestellt wird.

Bestehende Anwendungen können schrittweise auf serverlos migriert werden. Tatsächlich könnte die Art und Weise, wie sich die Technologie weiterentwickelt, dazu führen, dass herkömmliche Serverlösungen auf der Basis virtueller Maschinen nicht mehr erforderlich sind.