Могу ли я предоставить команды gcloud внутри python в функции облачной функции - PullRequest
1 голос
/ 23 января 2020

Я хочу запустить команду gs для копирования данных, используя функцию python в облачной функции, возможно ли выполнить команду оболочки внутри облачной функции ??.

Ответы [ 3 ]

1 голос
/ 23 января 2020

В соответствии с официальной документацией Среда выполнения облачных функций :

Облачные функции работают в полностью управляемой среде без серверов, где Google обрабатывает инфраструктуру, операционные системы и среды выполнения. полностью от вашего имени. Каждая облачная функция выполняется в своем изолированном безопасном контексте выполнения, автоматически масштабируется и имеет жизненный цикл, независимый от других функций.

Это среды выполнения, которые поддерживает облачные функции:

 Node.js 8, Node.js 10 (Beta), Python, Go 1.11, Go 1.13

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

Однако, если вы хотите скопировать данные в облачное хранилище или из него, вы можете использовать Клиентские библиотеки облачного хранилища для Python

0 голосов
/ 23 января 2020

Для взаимодействия с API Google из функции Cloud (Python runtime) команда оболочки не является идеальным выбором. Google Cloud Platform имеет Python библиотек для взаимодействия со своим сервисом, и я предлагаю вам их.

Пример Python кода для перечисления объектов в GCS Bucket

from google.cloud import storage
bucket_name = "gcs-bucket-name"
gcs_client = storage.Client()
gcs_objects = gcs_client.list_blobs(bucket_name)
  for obj in gcs_objects:
      print(obj.name)
0 голосов
/ 23 января 2020

Пытались использовать модуль subprocess , чтобы посмотреть, поможет ли он достичь того, что вам нужно? Я сам не пробовал, поэтому не уверен, сработает ли это.

import subprocess
subprocess.run(["ls", "-l"])

В качестве альтернативы вы также можете использовать CloudRun для запуска Docker образа с gcloud sdk , который может помочь вам выполнять команды оболочки напрямую (вместо того, чтобы проходить через python).

...