Я пытался воспроизвести ваш вариант использования:
Запустите команду:
gcloud app decribe
# .......
#locationId: europe-west2
Убедитесь, что ваш экспортный контейнер и ваш Облачные функции развернуты в том же месте.
Ваша облачная функция будет использовать учетную запись службы App Engine по умолчанию.
PROJECT_ID@appspot.gserviceaccount.com
Назначить этому учетная запись службы Datastore Import Export Admin
(я бы рекомендовал создать новую учетную запись службы для облачной функции, не используя учетную запись службы App Engine по умолчанию.)
Создать облачную функцию:
a. main.py
def export_datastore(request):
import google.auth
import google.auth.transport.requests
import json
import requests
#Get the Access Token
creds, project_id = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
token = creds.token
output_url_prefix = 'gs://your-bucket'
url = 'https://datastore.googleapis.com/v1/projects/{}:export'.format(project_id)
#We export all kinds and all namespaces
entity_filter = {
'kinds': [],
'namespace_ids': []
}
request = {
'project_id': project_id,
'output_url_prefix': output_url_prefix,
'entity_filter': entity_filter
}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token,
'Accept': 'application/json'
}
#Call the API to make the Datastore export
r = requests.post(url, data=json.dumps(request), headers=headers)
print(r.json())
return('Export command sent')
b. requirements.txt
# Function dependencies, for example:
google-auth
Используйте Google Cloud Scheduler для вызова облачной функции каждые 24 часа.