Ошибка при использовании команды gcloud в скрипте Python, работающем как Google Cloud Function - PullRequest
0 голосов
/ 28 февраля 2020

У меня ниже python код, работающий в функции Google Cloud.

pname = format(os.environ.get('GCP_PROJECT'))
project_metadata_file = "/tmp/" + pname + "_proj_metadata.json"
bucket_name = "XXXX"
H = open(project_metadata_file, "w")
project_list_command = "gcloud projects describe " + pname + " --format json"
project_output = subprocess.check_output(shlex.split(project_list_command))
project_output_json = json.loads(project_output)
H.write(project_output_json)
H.close()
upload_blob(bucket_name, project_metadata_file, os.path.basename(project_metadata_file))
return pname

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

Error: function terminated. Recommended action: inspect logs for termination reason. Details:
[Errno 2] No such file or directory: 'gcloud': 'gcloud'

Спасибо

Ответы [ 2 ]

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

Как уже упоминал DazWilkin, ваш код будет намного чище и надежнее, если вы будете использовать специализированную библиотеку.

Если вам действительно нужно использовать Cloud SDK с вашей функцией, вы можете добиться этого с помощью следующего.

  1. Загрузите соответствующий архив .
  2. Извлеките его в папку своей функции
  3. Установите путь к команде gcloud в './google-cloud -sdk / bin / gcloud 'в коде. Это может варьироваться в зависимости от того, где вы извлекли SDK в своей папке функций.
  4. Разверните функцию с помощью команды gcloud или заархивируйте ее и разверните из консоли.
0 голосов
/ 28 февраля 2020

Вы должны ожидать, что ваша функция будет развернута в контейнере, который включает, в вашем случае, Python время выполнения. Вы не можете предполагать, что ваша облачная функция включает среду оболочки с установленным облаком SDK. Я бы рекомендовал использовать Метод: projects.get API . Если вы хотите использовать команды cloud sdk, то Google Cloud Run будет одним из решений.

Введите имя проекта, и вы получите следующие выходные данные:

{
  "projectNumber": "",
  "projectId": "",
  "lifecycleState": "",
  "name": "",
  "createTime": "",
  "parent": {
    "type": "",
    "id": ""
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...