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.
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.
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é.
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
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.
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.
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.
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.
「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
}
} ]
}
Recommended Posts