[PYTHON] À propos du développement Cloud run + Firebase [Développement d’applications Web]

Aperçu

J'utilise activement GCP, mais je pensais que Cloud run + Firebase serait bien si je voulais créer un service à moindre coût et facilement, alors je l'ai résumé. En termes de maintenabilité, je pense que Cloud Run est meilleur que Cloud Run et Cloud Functions.

Liste d'environnement de développement

introduction

Tout d'abord, activez le service dans l'environnement ci-dessus. De plus, l'IAM minimum requis pour gcloud est le suivant.

Étant donné que Cloud build est utilisé cette fois, les autorisations suivantes sont accordées à «[email protected]» dans IAM.

Constitution

La configuration suppose ce qui suit. Les développeurs back-end peuvent pousser vers le référentiel, et les développeurs front-end ne se soucient pas du back-end et gardent à l'esprit d'utiliser Cloud run comme serveur d'API.

Ici, Firestore est dans la configuration, mais je ne le couvrirai pas dans cet article (je pourrais l'écrire dans un autre article). De plus, si vous pensez simplement au traitement basé sur Firestore, vous pouvez utiliser "Cloud Functions", mais compte tenu de l'utilisation de votre propre bibliothèque et de la maintenabilité du code source, il n'était pas pratique d'utiliser "Cloud Functions", donc " "Cloud run" est sélectionné.

gcp.jpg

Côté back-end

Structure de répertoire côté développement bask-end

Je pense que la structure des répertoires du côté back-end devrait être au moins comme suit. Vous pouvez ajouter d'autres fichiers si nécessaire, mais ** gardez à l'esprit que vous devez ajouter un traitement au fichier docker décrit ci-dessous **.

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

Paramètres du référentiel source

Comme vous pouvez le voir dans l'image ci-dessous, il y a "Créer un référentiel", alors cliquez dessus pour le créer. De plus, si vous appuyez sur la marque à trois points, sélectionnez «Gérer les clés SSH» et sélectionnez «Enregistrer la clé d'authentification SSH», une clé d'authentification SSH sera générée. Ceci est utilisé lors du transfert vers le référentiel.

SSH.jpg

Paramètres de Cloud Build

Si vous avez activé Cloud Build, vous pouvez créer un déclencheur en sélectionnant l'onglet Cloud Build-> onglet Déclencheurs. Les paramètres doivent ressembler à ce qui suit.

--Event: Push to branch --Source: Référentiel créé --Branch: Vous n'avez pas besoin de le définir, mais vous pouvez le définir pour "production" / "test" pour chaque branche. --Configuration de construction: /cloudbuild.yaml

"Cloudbuild.yaml" ressemble à ce qui suit. En modifiant les substitutions, vous pouvez modifier les paramètres.

--_ PLATFORM: paramètre de type de service d'exécution dans le cloud --_ REGION: réglage de l'emplacement --_ SERVICE_NAME: nom du service --_ AUTHENTICATION: paramètre d'autorisation d'accès

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 #Voir la présentation de la documentation de Google IAM
images:
  - gcr.io/$PROJECT_ID/${_SERVICE_NAME}

Cloud run Le contenu du fichier image à déployer sur Cloud run est généré par le fichier docker suivant. Le contenu sera modifié en conséquence.

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

Après cela, si vous le poussez vers le référentiel, il sera automatiquement déployé sur "Cloud run". Dans l'état de compilation, vous pouvez le vérifier sur la console Cloud.

Côté frontal

Firebase(hosting)

Il s'agit de l'environnement du côté frontal, mais la structure des répertoires n'est pas décrite en particulier. Fondamentalement, Vue cli générera automatiquement un fichier. J'ai écrit un article sur Vue, mais si vous voulez savoir d'une manière ou d'une autre, veuillez vous référer à l'article suivant.

Environnement de développement

Le cadre Javascript est le suivant.

J'ai également vérifié React et Angular.js, mais personnellement Vue.js était le plus facile d'accès.

Si vous n'êtes pas très précis sur la conception, il est préférable de réduire la description CSS avec Bootstrap.

Envoyer une requête de Firebase au conteneur d'exécution Cloud

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

firebase.json


"hosting": {
 // ...

 // Add the "rewrites" attribute within "hosting"
 "rewrites": [ {
   "source": "**", //Autoriser toutes les demandes côté client
   "run": {
     "serviceId": "<service name>", //Nom du service(Nom du conteneur Cloud Run)
     "region": "us-central1" //Les paramètres de localisation
   }
 } ]
}

référence

Recommended Posts

À propos du développement Cloud run + Firebase [Développement d’applications Web]
Développement d'applications WEB à l'aide de django-development partie 1-
Développement d'applications Web avec Flask
Développement d'une application WEB avec Django [Django startup]
Développement d'une application WEB avec Django [Ajout d'application]
Développement d'une application WEB avec Django [Définition de modèle]
Développement d'une application WEB avec Django [Paramètre initial]
Développement d'une application WEB avec Django [Traitement des requêtes]
Exécutez une application Web Python avec Docker
Développement d'une application WEB avec Django [Création de l'écran d'administration]
J'ai essayé de développer une application Web et j'ai réfléchi à la manière d'éviter que les débutants ne tombent malades.
Application Web utilisant Bottle (1)
Tutoriel Cloud Run (python)
Une histoire sur tout, de la collecte de données au développement d'IA et à la publication d'applications Web en Python (3. développement d'IA)