[PYTHON] Informationen zu Cloud Run + Firebase-Entwicklung [Entwicklung von Webanwendungen]

Überblick

Ich verwende GCP aktiv, aber als ich einen Dienst kostengünstig und einfach erstellen wollte, dachte ich, dass Cloud Run + Firebase gut wäre, also habe ich es zusammengefasst. In Bezug auf die Wartbarkeit denke ich, dass der Cloud-Lauf besser ist als der Cloud-Lauf und die Cloud-Funktionen.

Liste der Entwicklungsumgebungen

Einführung

Aktivieren Sie zunächst den Dienst in der oben genannten Umgebung. Darüber hinaus ist für Icloud mindestens IAM erforderlich.

Da diesmal Cloud Build verwendet wird, werden die folgenden Berechtigungen an "[email protected]" in IAM erteilt.

--Cloud Admin ausführen

Verfassung

Die Konfiguration setzt Folgendes voraus. Back-End-Entwickler können auf das Repository pushen, und Front-End-Entwickler interessieren sich nicht für das Back-End und denken daran, Cloud Run als API-Server zu verwenden.

Hier befindet sich Firestore in der Konfiguration, aber ich werde es in diesem Artikel nicht behandeln (ich könnte es in einem anderen Artikel schreiben). Wenn Sie nur an eine Verarbeitung auf der Basis von Firestore denken, können Sie "Cloud-Funktionen" verwenden. Angesichts der Verwendung Ihrer eigenen Bibliothek und der Wartbarkeit des Quellcodes waren "Cloud-Funktionen" jedoch unpraktisch. "Cloud Run" ist ausgewählt.

gcp.jpg

Backend-Seite

Bask-End Development-seitige Verzeichnisstruktur

Ich denke, dass die Verzeichnisstruktur auf der Back-End-Seite mindestens wie folgt sein sollte. Sie können nach Bedarf weitere Dateien hinzufügen. Beachten Sie jedoch, dass Sie der unten beschriebenen Docker-Datei eine Verarbeitung hinzufügen müssen.

/root
  |-app.py
  |-requirements.txt
  |-cloudbuild.yaml
  '-dockerfile

Einstellungen für das Quell-Repositry

Wie Sie im Bild unten sehen können, gibt es "Repository erstellen". Klicken Sie also darauf, um es zu erstellen. Wenn Sie die Dreipunktmarke drücken, "SSH-Schlüssel verwalten" und dann "SSH-Authentifizierungsschlüssel registrieren" auswählen, wird ein SSH-Authentifizierungsschlüssel generiert. Dies wird beim Pushing in das Repository verwendet.

SSH.jpg

Cloud Build-Einstellungen

Wenn Sie Cloud Build aktiviert haben, können Sie einen Trigger erstellen, indem Sie die Registerkarte Cloud Build-> Trigger auswählen. Die Einstellungen sollten wie folgt aussehen.

"Cloudbuild.yaml" sieht wie folgt aus. Durch Ändern der Ersetzungen können Sie die Einstellungen ändern.

--_ PLATTFORM: Einstellung des Cloud-Ausführungsdiensttyps --_ REGION: Standorteinstellung --_ SERVICE_NAME: Dienstname --_ AUTHENTICATION: Zugriffsberechtigungseinstellung

cloudbuild.yaml


steps:
  - name: 'gcr.io/cloud-builders/docker'
    id: 'build-docker-image'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/${_SERVICE_NAME}', '.']
  - name: 'gcr.io/cloud-builders/docker'
    id: 'push-docker-image'
    args: ['push', 'gcr.io/$PROJECT_ID/${_SERVICE_NAME}']
  - name: 'gcr.io/cloud-builders/gcloud'
    id: 'deploy-cloud-run'
    args: ['beta', 'run', 'deploy', '${_SERVICE_NAME}', '--image', 'gcr.io/$PROJECT_ID/${_SERVICE_NAME}', '--platform=${_PLATFORM}', '--region', '${_REGION}']
  - name: 'gcr.io/cloud-builders/gcloud'
    id: 'apply-member-role-cloud-run'
    args: ['beta', 'run', 'services', 'add-iam-policy-binding', '${_SERVICE_NAME}', '--region', '${_REGION}', '--platform=${_PLATFORM}', '--member', '${_AUTHENTICATION}', '--role', 'roles/run.invoker']
substitutions:
  _PLATFORM: managed # full manage
  _REGION: asia-northeast1 # tokyo
  _SERVICE_NAME: <_SERVICE_NAME> # service name
  _AUTHENTICATION: allUsers #Siehe Übersicht über die Google IAM-Dokumentation
images:
  - gcr.io/$PROJECT_ID/${_SERVICE_NAME}

Cloud run Der Inhalt der Image-Datei, die für die Cloud-Ausführung bereitgestellt werden soll, wird von der folgenden Docker-Datei generiert. Der Inhalt wird entsprechend geändert.

dockerfile


# Use the official Python image.
# https://hub.docker.com/_/python
FROM python:3.7

# Copy local code to the container image.
ENV APP_HOME /app
WORKDIR $APP_HOME

# Install production dependencies.
COPY requirements.txt ./
COPY app.py ./
RUN pip install --no-cache-dir -r requirements.txt

# Service must listen to $PORT environment variable.
# This default value facilitates local development.
ENV PORT 8080

# Run the web service on container startup. Here we use the gunicorn
# webserver, with one worker process and 8 threads.
# For environments with multiple CPU cores, increase the number of workers
# to be equal to the cores available.
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app

Wenn Sie es anschließend in das Repository verschieben, wird es automatisch für "Cloud Run" bereitgestellt. Im Build-Status können Sie dies in der Cloud-Konsole überprüfen.

Vorderseite

Firebase(hosting)

Dies ist die Umgebung auf der Front-End-Seite, aber die Verzeichnisstruktur wird nicht speziell beschrieben. Grundsätzlich generiert Vue cli automatisch eine Datei. Ich habe einen Artikel über Vue geschrieben, aber wenn Sie es irgendwie wissen wollen, lesen Sie bitte den folgenden Artikel.

Entwicklungsumgebung

Das Javascript-Framework lautet wie folgt.

Ich habe auch React und Angular.js überprüft, aber persönlich war Vue.js am einfachsten zu erreichen.

Wenn Sie sich nicht besonders für das Design interessieren, ist es besser, die CSS-Beschreibung mit Bootstrap zu reduzieren.

Senden Sie eine Anfrage von Firebase an den Cloud-Run-Container

「firebase.json」の「hosting」に「rewrites」を追加する。リクエストは「projectID.web.app/」「projectID.firebaseapp.com/」「カスタムドメイン/」から可能となる(例えば、get)。projectIDはGCPのプロジェクトホーム画面から確認できる。

firebase.json


"hosting": {
 // ...

 // Add the "rewrites" attribute within "hosting"
 "rewrites": [ {
   "source": "**", //Alle clientseitigen Anforderungen zulassen
   "run": {
     "serviceId": "<service name>", //Dienstname(Name des Cloud-Run-Containers)
     "region": "us-central1" //Ortseinstellungen
   }
 } ]
}

Referenz

Recommended Posts

Informationen zu Cloud Run + Firebase-Entwicklung [Entwicklung von Webanwendungen]
WEB-Anwendungsentwicklung mit Django-Entwicklung Teil 1-
Entwicklung von Webanwendungen mit Flask
Entwicklung einer WEB-Anwendung mit Django [Django-Start]
Entwicklung einer WEB-Anwendung mit Django [Anwendungszusatz]
Entwicklung einer WEB-Anwendung mit Django [Modelldefinition]
Entwicklung der WEB-Anwendung mit Django [Grundeinstellung]
Entwicklung einer WEB-Anwendung mit Django [Request Processing]
Führen Sie eine Python-Webanwendung mit Docker aus
Entwicklung einer WEB-Anwendung mit Django [Erstellung des Admin-Bildschirms]
Ich habe versucht, eine Webanwendung zu entwickeln, und überlegt, wie ich verhindern kann, dass Anfänger krank werden.
Webanwendung mit Flasche (1)
Cloud Run Tutorial (Python)
Eine Geschichte über alles von der Datenerfassung über die KI-Entwicklung bis hin zur Veröffentlichung von Webanwendungen in Python (3. KI-Entwicklung)