Cette fois, je vais vous présenter comment effectuer une sauvegarde automatique du magasin de données de Google Cloud Platform.
--L'entité existe dans le magasin de données
Accédez à GoogleCloudPlatformStorage (https://console.cloud.google.com/projectselector2/storage/browser?supportedpurview=project) et sélectionnez un projet
Cliquez sur Créer un compartiment pour créer un compartiment
--Mettez un nom dans le seau
Appuyez sur [Créer] lorsque les réglages sont terminés. J'ai fait un seau pour mettre une sauvegarde comme celle-ci. Ensuite, configurez pour placer la sauvegarde dans le compartiment
Ici, https://cloud.google.com/datastore/docs/schedule-export?hl=ja Je vais l'ajouter avec Yaml et Python en y faisant référence. Tout d'abord, créez ** [app.yaml] ** avec Yaml. (S'il existe déjà, créez un dossier et créez-le dedans) ← Je l'ai mis dans le dossier de sauvegarde comme ceci
L'app.yaml ici est préparé pour les paramètres Python.
app.yaml
runtime: python27
api_version: 1
threadsafe: true
service: cloud-datastore-admin
libraries:
- name: webapp2
version: "latest"
handlers:
- url: /cloud-datastore-export
script: cloud_datastore_admin.app
login: admin
Ensuite, préparons ** [cloud_datastore_admin.py] ** en Python.
cloud_datastore_admin.py
import datetime
import httplib
import json
import logging
import webapp2
from google.appengine.api import app_identity
from google.appengine.api import urlfetch
class Export(webapp2.RequestHandler):
def get(self):
access_token, _ = app_identity.get_access_token(
'https://www.googleapis.com/auth/datastore')
app_id = app_identity.get_application_id()
timestamp = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
output_url_prefix = self.request.get('output_url_prefix')
assert output_url_prefix and output_url_prefix.startswith('gs://')
if '/' not in output_url_prefix[5:]:
# Only a bucket name has been provided - no prefix or trailing slash
output_url_prefix += '/' + timestamp
else:
output_url_prefix += timestamp
entity_filter = {
'kinds': self.request.get_all('kind'),
'namespace_ids': self.request.get_all('namespace_id')
}
request = {
'project_id': app_id,
'output_url_prefix': output_url_prefix,
'entity_filter': entity_filter
}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + access_token
}
url = 'https://datastore.googleapis.com/v1/projects/%s:export' % app_id
try:
result = urlfetch.fetch(
url=url,
payload=json.dumps(request),
method=urlfetch.POST,
deadline=60,
headers=headers)
if result.status_code == httplib.OK:
logging.info(result.content)
elif result.status_code >= 500:
logging.error(result.content)
else:
logging.warning(result.content)
self.response.status_int = result.status_code
except urlfetch.Error:
logging.exception('Failed to initiate export.')
self.response.status_int = httplib.INTERNAL_SERVER_ERROR
app = webapp2.WSGIApplication(
[
('/cloud-datastore-export', Export),
], debug=True)
Si vous pouvez entrer comme ça, déployons
gcloud config set project [Nom du projet]
gcloud app deploy
Si vous pouvez le déployer avec succès, vous êtes prêt pour la sauvegarde automatique. Nous allons l'automatiser ensuite.
Voir aussi https://cloud.google.com/datastore/docs/schedule-export?hl=ja Je vais procéder à
Commencez par configurer une tâche cron qui appelle la planification-datastore-exportations GCP Créez ** [cron.yaml] **.
cron.yaml
cron:
- description: "Texte explicatif"
url: /cloud-datastore-export?output_url_prefix=gs://[Nom du godet]
target: cloud-datastore-admin
timezone: Asia/Tokyo
schedule: every 12 hours
Si cela vous convient, déployons
gcloud app deploy cron.yaml
Utilisez kind si vous souhaitez exporter uniquement certains types d'entités lors de la sauvegarde
url: /cloud-datastore-export?output_url_prefix=gs://[Nom du godet]&kind=[Nom du type d'entité]
Il est également possible d'en spécifier plusieurs spécifiques
url: /cloud-datastore-export?output_url_prefix=gs://[Nom du godet]&kind=[Nom du type d'entité]&kind=[Nom du type d'entité]
Si vous souhaitez exporter si l'espace de noms existe pour une entité particulière
url: /cloud-datastore-export?output_url_prefix=gs://[Nom du godet]&kind=[Nom du type d'entité]&kind=[Nom du type d'entité]
Vous pouvez également définir des paramètres détaillés en entrant
Précisons l'heure d'exécution de la sauvegarde dans ** [planning] ** Actuellement, il est configuré pour effectuer une sauvegarde toutes les 12 heures, mais si c'est une fois par jour
schedule: every 24 hours
Si vous souhaitez effectuer une sauvegarde tous les jours à 00h00
schedule: every day 00:00
Peut être réglé largement Pour plus d'informations [https://cloud.google.com/appengine/docs/flexible/java/scheduling-jobs-with-cron-yaml?hl=ja#defining_the_cron_job_schedule](https://cloud.google.com/appengine/ Les détails peuvent être trouvés dans docs / flexible / java / scheduling-jobs-with-cron-yaml? Hl = ja #defining_the_cron_job_schedule). À propos, si vous souhaitez définir l'heure de référence pour exécuter la sauvegarde vers l'heure du Japon
timezone: Asia/Tokyo
Si c'est le cas, ce sera fait au Japon.
Si le travail cron AppEngine est affiché comme ceci, cron fonctionne bien
Maintenant, déplaçons-le avec [Exécuter maintenant] Maintenant!
Wow, Elatter (´ ゚ д ゚ `) Dans un tel cas, voyons l'erreur dans [View] du journal.
Quand j'ai affiché le journal, c'était 403.
Lorsque vous l'ouvrez, il est dit "L'appelant n'a pas la permission" ... En d'autres termes, "je n'ai pas le pouvoir d'importer et d'exporter".
Allons donner l'autorité
Ouvrir IAM dans IAN et administration Modifiez-y [ID de projet] @ appspot.gserviceaccount.com Appuyez sur [Ajouter un autre rôle] Sélectionnez [Cloud Datastore Import / Export Administrator] dans Datastore et enregistrez!
Alors revenons à la course à pied Si vous appuyez à nouveau sur [Exécuter maintenant] ... C'est fait! !!
Maintenant, il collecte des données toutes les 12 heures!
Comment était tout le monde, ça a marché? Je me demande si ce commentaire s'est bien passé (´ ゚ д ゚ `)
Mais si vous sauvegardez les données dans le magasin de données comme ceci Vous pouvez l'effacer par erreur humaine ou résoudre tout problème. Je ne pense pas qu'il y ait de perte à le faire
Cela fait longtemps, mais merci! !!
https://cloud.google.com/storage/docs/locations?_ga=2.5981299.-176719181.1568084299
https://cloud.google.com/datastore/docs/schedule-export?hl=ja
https://cloud.google.com/appengine/docs/flexible/java/scheduling-jobs-with-cron-yaml?hl=ja#defining_the_cron_job_schedule
Recommended Posts