Облачная функция Google для планирования экспорта для объектов хранилища данных - PullRequest
0 голосов
/ 31 января 2020

У нас есть приложение, размещенное в GCP AppEngine. Это приложение сохраняет изображения и другие данные в хранилище данных. Изображения представляют собой отдельные сущности (виды), скажем, Kind1 и Kind2. Нам нужно только экспортировать эти два вида сущностей и сохранить экспорт в хранилище, которое называется datastore-exports. Мы экспортировали эти два вида сущностей вручную через консоль. Мы хотели бы создать облачную функцию, которая могла бы экспортировать два вышеупомянутых вида сущностей хранилища данных ежедневно каждые 24 часа. Для этого мне нужна помощь по файлам и коду логики c.

Ниже приведены два примера, с которыми я столкнулся, и которые в некоторой степени мы хотим выполнить sh.

Я вижу, они делают это с пожарным магазином ЗДЕСЬ .

Я также посмотрел на это сделать c ЗДЕСЬ , но нам нужно использовать python 3.

Любая помощь по node.js или python3 методы будут высоко оценены.

Спасибо,

1 Ответ

0 голосов
/ 01 февраля 2020

Я пытался воспроизвести ваш вариант использования:

  1. Запустите команду:

     gcloud app decribe 
     # .......
     #locationId: europe-west2
    
  2. Убедитесь, что ваш экспортный контейнер и ваш Облачные функции развернуты в том же месте.

  3. Ваша облачная функция будет использовать учетную запись службы App Engine по умолчанию.

     PROJECT_ID@appspot.gserviceaccount.com  
    
  4. Назначить этому учетная запись службы 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 часа.
...