[PYTHON] So führen Sie die Exportfunktion des GCP-Datenspeichers automatisch aus

Dieses Mal werde ich vorstellen, wie eine automatische Sicherung des Datenspeichers der Google Cloud Platform erstellt wird.

Annahme

Verfahren

1, Machen Sie einen Eimer zum Sichern mit Speicher

Gehen Sie zu GoogleCloudPlatformStorage (https://console.cloud.google.com/projectselector2/storage/browser?supportedpurview=project) und wählen Sie Ihr Projekt aus スクリーンショット 2019-11-26 9.20.37.png

Klicken Sie auf Bucket erstellen, um einen Bucket zu erstellen スクリーンショット 2019-11-26 14.17.00.png

[Klicken Sie hier für Details](https://cloud.google.com/storage/docs/locations?_ga=2.5981299.-176719181.1568084299) --Wählen Sie eine Standardspeicherklasse für Ihre Daten --Standard: Ideal für die kurzfristige Speicherung und für Daten, auf die häufig zugegriffen wird --Nearline: Ideal für Daten und Backups, auf die weniger als einmal im Monat zugegriffen wird --Coldline: Ideal für Daten und Backups, auf die weniger als einmal im Jahr zugegriffen wird --Wählen Sie, wie der Zugriff auf Objekte gesteuert werden soll - Detaillierte Verwaltung --Uniform - Detaillierte Einstellungen (optional)

Drücken Sie [Erstellen], wenn die Einstellungen abgeschlossen sind. スクリーンショット 2019-11-26 15.13.57.png Ich habe einen Eimer gemacht, um ein Backup wie dieses zu erstellen. Richten Sie als Nächstes das Backup in den Bucket ein

2. Erstellen Sie einen Quellcode, der die Datenspeicherentität empfängt und sichert.

Hier https://cloud.google.com/datastore/docs/schedule-export?hl=ja Ich werde es mit Yaml und Python hinzufügen, während ich mich darauf beziehe. Erstellen Sie zunächst ** [app.yaml] ** mit Yaml. (Wenn es bereits vorhanden ist, erstellen Sie einen Ordner und erstellen Sie ihn darin.) Screenshot 2019-11-26 15.33.34.png ← Ich habe es so in den Sicherungsordner gelegt

Die App.yaml hier ist für Python-Einstellungen vorbereitet.

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

Als nächstes bereiten wir ** [cloud_datastore_admin.py] ** in Python vor.

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)

Wenn Sie so etwas eingeben können, lassen Sie uns bereitstellen

  1. Verwenden Sie [config set], um gcloud für das richtige Projekt zu konfigurieren
gcloud config set project [Projektname]
  1. Stellen Sie [app.yaml] für das Projekt bereit. * Verwechseln Sie nicht das Verzeichnis, in dem sich [app.yaml] befindet! !!
gcloud app deploy

Wenn Sie es erfolgreich bereitstellen können, sind Sie für die automatische Sicherung bereit. Wir werden es als nächstes automatisieren.

3. Stellen Sie ein, dass es automatisch im Cron-Job ausgeführt wird

Siehe auch https://cloud.google.com/datastore/docs/schedule-export?hl=ja Ich werde fortfahren

Richten Sie zuerst einen Cron-Job ein, der den GCP-Zeitplan-Datenspeicher-Export aufruft Erstellen Sie ** [cron.yaml] **.

cron.yaml


cron:
- description: "Erläuterungstext"
  url: /cloud-datastore-export?output_url_prefix=gs://[Eimername]
  target: cloud-datastore-admin
  timezone: Asia/Tokyo
  schedule: every 12 hours


Wenn dies in Ordnung ist, lassen Sie uns bereitstellen

gcloud app deploy cron.yaml

Für detaillierte Einstellungen ~ Auswahl ~

Verwenden Sie kind, wenn Sie beim Sichern nur bestimmte Arten von Entitäten exportieren möchten

url: /cloud-datastore-export?output_url_prefix=gs://[Eimername]&kind=[Name des Entitätstyps]

Es ist auch möglich, mehrere spezifische anzugeben

url: /cloud-datastore-export?output_url_prefix=gs://[Eimername]&kind=[Name des Entitätstyps]&kind=[Name des Entitätstyps]

Wenn Sie exportieren möchten, wenn der Namespace für eine bestimmte Entität vorhanden ist

url: /cloud-datastore-export?output_url_prefix=gs://[Eimername]&kind=[Name des Entitätstyps]&kind=[Name des Entitätstyps]

Sie können auch detaillierte Einstellungen vornehmen, indem Sie eingeben

Für detaillierte Einstellungen ~ Zeiteinstellung ~

Geben Sie die Zeit für die Ausführung der Sicherung in ** [Zeitplan] ** an Derzeit wird die Sicherung alle 12 Stunden durchgeführt, jedoch einmal am Tag

schedule: every 24 hours

Wenn Sie jeden Tag um 00:00 Uhr eine Sicherung durchführen möchten

schedule: every day 00:00

Kann weit eingestellt werden Weitere Informationen erhalten Sie unter https://cloud.google.com/appengine/docs/flexible/java/scheduling-jobs-with-cron-yaml?hl=ja#defining_the_cron_job_schedule. Details finden Sie in docs / flexible / java / Scheduling-Jobs-with-Cron-Yaml? Hl = ja #defining_the_cron_job_schedule). Übrigens, wenn Sie die Referenzzeit für die Ausführung der Sicherung auf Japan einstellen möchten

timezone: Asia/Tokyo

Wenn ja, wird es in Japan Zeit gemacht.

4, Cron Job Implementierung

Lassen Sie uns testen, ob es tatsächlich funktioniert

Wenn der AppEngine-Cron-Job wie folgt angezeigt wird, funktioniert Cron gut

スクリーンショット 2019-11-27 10.48.33.png

Verschieben wir es jetzt mit [Jetzt ausführen] Jetzt!

Wow, Elatter (´ ´ д ゚ `) スクリーンショット 2019-11-27 10.49.27.png In einem solchen Fall sehen wir uns den Fehler in [Ansicht] des Protokolls an.

Siehe Fehler im Protokoll

Als ich das Protokoll anzeigte, war es 403. スクリーンショット 2019-11-27 10.49.43.png

Wenn Sie es öffnen, heißt es "Der Anrufer hat keine Erlaubnis" ... Mit anderen Worten: "Ich habe keine Berechtigung zum Importieren und Exportieren." スクリーンショット 2019-11-27 10.50.26.png

Lassen Sie uns Autorität geben

Gib Autorität

Öffnen Sie IAM in IAN und Administration スクリーンショット 2019-11-27 11.14.34.png Bearbeiten Sie darin [Projekt-ID] @ appspot.gserviceaccount.com スクリーンショット 2019-11-27 11.22.26.png Drücken Sie [Weitere Rolle hinzufügen] Wählen Sie im Datenspeicher [Cloud Datastore Import / Export Administrator] und speichern Sie! スクリーンショット 2019-11-27 11.22.58.png

Also lass uns wieder rennen スクリーンショット 2019-11-27 10.49.27.png Wenn Sie erneut [Jetzt ausführen] drücken ... スクリーンショット 2019-11-27 11.24.49.png Es ist fertig! !!

Jetzt werden alle 12 Stunden Daten gesammelt!

Schließlich

Wie war jeder, hat es funktioniert? Ich frage mich, ob dieser Kommentar gut gelaufen ist (´ ゚ д ゚ `)

Aber wenn Sie die Daten im Datenspeicher so sichern Sie können es durch menschliches Versagen löschen oder Probleme beheben. Ich glaube nicht, dass es dabei einen Verlust gibt

Es ist lange her, aber danke! !!

Referenz-URL

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