Dieses Mal werde ich vorstellen, wie eine automatische Sicherung des Datenspeichers der Google Cloud Platform erstellt wird.
Gehen Sie zu GoogleCloudPlatformStorage (https://console.cloud.google.com/projectselector2/storage/browser?supportedpurview=project) und wählen Sie Ihr Projekt aus
Klicken Sie auf Bucket erstellen, um einen Bucket zu erstellen
Drücken Sie [Erstellen], wenn die Einstellungen abgeschlossen sind. Ich habe einen Eimer gemacht, um ein Backup wie dieses zu erstellen. Richten Sie als Nächstes das Backup in den Bucket ein
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.) ← 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
gcloud config set project [Projektname]
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.
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
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
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.
Wenn der AppEngine-Cron-Job wie folgt angezeigt wird, funktioniert Cron gut
Verschieben wir es jetzt mit [Jetzt ausführen] Jetzt!
Wow, Elatter (´ ´ д ゚ `) In einem solchen Fall sehen wir uns den Fehler in [Ansicht] des Protokolls an.
Als ich das Protokoll anzeigte, war es 403.
Wenn Sie es öffnen, heißt es "Der Anrufer hat keine Erlaubnis" ... Mit anderen Worten: "Ich habe keine Berechtigung zum Importieren und Exportieren."
Lassen Sie uns Autorität geben
Öffnen Sie IAM in IAN und Administration Bearbeiten Sie darin [Projekt-ID] @ appspot.gserviceaccount.com Drücken Sie [Weitere Rolle hinzufügen] Wählen Sie im Datenspeicher [Cloud Datastore Import / Export Administrator] und speichern Sie!
Also lass uns wieder rennen Wenn Sie erneut [Jetzt ausführen] drücken ... Es ist fertig! !!
Jetzt werden alle 12 Stunden Daten gesammelt!
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! !!
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