Как развернуть функцию Google из Google SDK из локальной системы времени выполнения python - PullRequest
2 голосов
/ 14 февраля 2020

Я пытаюсь развернуть облачную функцию Google из локальной системы с помощью инструмента командной строки gcloud.

Мои файлы сжаты в ZIP-файл. Как описано в прикрепленном скриншоте , ZIP-файл содержит main.py и require.txt

main.py (взято из Интернета для тестирования)

from wand.image import Image
from google.cloud import storage
client = storage.Client.from_service_account_json(
         'C:\\Users\\an20086686\\AppData\\Local\\Google\\Cloud SDK\\deploy\\****-*****-poc-e4b410a65986.JSON')
THUMBNAIL_BUCKET = 'a_demo_storage_trigger1'
def make_thumbnail(data, context):

    bucket = client.get_bucket(data['****_my-awesome-bucket'])
    blob = bucket.get_blob(data['name'])
    imagedata = blob.download_as_string()

    newimage = Image(blob=imagedata)
    newimage.sample(200,200)

    bucket = client.get_bucket(THUMBNAIL_BUCKET)
    newblob = bucket.blob('thumbnail-' + data['name'])     
    newblob.upload_from_string(newimage.make_blob())

needs.txt

google-cloud-storage
Wand

Использование команды ниже для развертывания этой функции:

gcloud beta functions deploy make_thumbnail --runtime python37 \
--trigger-bucket ****_my-awesome-bucket \
--trigger-event google.storage.object.finalize

Ошибка 1: (gcloud.beta.functions.deploy) нераспознанные аргументы: google.storage.object.finalize

Когда я использую:

gcloud beta functions deploy make_thumbnail --runtime python37 \
--trigger-bucket ****_my-awesome-bucket \
--trigger-event google.storage.object.finalize

ОШИБКА: (gcloud.beta.functions.deploy) OperationError: code = 3, message = Функция не выполнена при загрузке кода пользователя.

Сообщение об ошибке: файл main.py, который должен определить функцию, не существует

Журнал обнаруженной ошибки:

Снимок экрана

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Как упомянул @YaguraStation, проблема связана с ZIP-файлом. Позвольте мне дать более подробное объяснение.

Если вы следуете этой документации, Развертывание с вашего локального компьютера , чтобы развернуть вашу функцию с помощью Команда gcloud Ваши файлы не должны быть сжаты в файл ZIP .

Ваша команда должна выглядеть следующим образом:

gcloud functions deploy make_thumbnail --runtime python37 \
--trigger-resource ****_my-awesome-bucket \
--trigger-event google.storage.object.finalize

Примечание: RUNTIME и TRIGGER - это два разных значения.

Если вы хотите развернуть функцию и сжать файлы в файл ZIP , добавьте флаг --source :

gcloud functions deploy make_thumbnail --runtime python37 \
--trigger-resource ****_my-awesome-bucket \
--trigger-event google.storage.object.finalize \
--source gs://path/to_file/file.zip

Я протестировал обе команды, указанные выше, и они работают для меня, как и предполагалось.

1 голос
/ 14 февраля 2020

В учебнике не используется ZIP-файл.

Если вы хотите использовать ZIP-файл, вам нужно указать его с опцией --source. См. документы .

И не уверен, что это опечатка в вашем вопросе, но перед --trigger-event.

должен быть пробел.
...