Какие варианты можно выбрать для переноса файлов конфигурации из облачного хранилища Google в стандарт App Engine? - PullRequest
0 голосов
/ 26 июня 2019

Мне нужно прочитать файлы .php в корзине, которая находится в Google Cloud Storage внутри моего экземпляра (-ов) App Engine (стандартных).

У меня есть два веб-приложения:

  • Веб-приложение 1 - это внутренний инструмент (размещенный локально), который позволяет нам изменять некоторые конфигурации и сохранять их в локальном файле .php в форме JSON, а затем rsync'd для Google Cloud Storage.
  • Web App 2 - еще один внутренний инструмент, размещенный на App Engine (Standard - php72).Это приложение должно постоянно читать файлы конфигурации из Web App 1.

У нас есть несколько других веб-приложений, которые также зависят от этих файлов конфигурации, но, поскольку они не связаны с этой конкретной проблемой, я выигралне объясню их.

В настоящее время мы решаем эту проблему, запуская cron в Web App 2 каждую минуту, когда rsync переходит из облачного хранилища Google на сервер.

Некоторые варианты, которые я выбралс:

  • Потоковые файлы конфигурации из корзины в Веб-приложение 2
  • Предохранитель облачного хранилища, но яВам нужно будет найти способ перезагрузить PHP
  • Переключиться на App Engine (Flex), создать собственный образ докера с установленным gcloud иучетные данные в ведро.Проблема заключается в том, что наша производственная среда будет отличаться от промежуточной

1 Ответ

0 голосов
/ 28 июня 2019

Способ получить доступ к облачному хранилищу из приложения 2 при каждом обновлении облачного хранилища:

  1. Создать в приложении конечную точку, которая будет инициировать процесс чтения файлов.,Поскольку вы будете внутри PHP, используйте PHP Cloud Storage libs .

импортируйте lib:

composer require google/cloud-storage

Общий код для загрузки CloudОбъекты хранения :

use Google\Cloud\Storage\StorageClient;

/**
 * Download an object from Cloud Storage and save it as a local file.
 *
 * @param string $bucketName the name of your Google Cloud bucket.
 * @param string $objectName the name of your Google Cloud object.
 * @param string $destination the local destination to save the encrypted object.
 *
 * @return void
 */
function download_object($bucketName, $objectName, $destination)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->downloadToFile($destination);
    printf('Downloaded gs://%s/%s to %s' . PHP_EOL,
        $bucketName, $objectName, basename($destination));
}
Создайте Облачную функцию , которая будет работать в фоновом режиме и активироваться при выполнении обновления в облачном хранилище (запускаемом облачным хранилищем), вы можете указать, вызвано ли событие из-за какого-либо объекта:созданный, удаленный, заархивированный или обновленный (обновление метаданных), но имейте в виду, что вам придется создавать скрипт с использованием Go, Nodejs или Python.

Сценарий будет вызывать вашу конечную точку в приложении 2:

import requests

def hello_gcs(event, context):
    """Triggered by a change to a Cloud Storage bucket.
    Args:
         event (dict): Event payload.
         context (google.cloud.functions.Context): Metadata for the event.
    """
    file = event
    url = 'https://app2.appspot.com/'
    response = requests.get(url)
    print(f"call made.")
    print(f"Processing file: {file['name']}.")

Не забудьте добавить зависимость «запросов» на вкладку «needs.txt» из функций Cloud ConsoleGUI.

Вы можете сделать это взаимодействие настолько простым или сложным, насколько пожелаете, преимущество в том, что «синхронизация» происходит только тогда, когда происходят изменения в корзине Cloud Storage, а не каждую минуту, как вы делаете в настоящее время с Cron.работа.

...