Облачная функция Google + Python - PullRequest
0 голосов
/ 10 сентября 2018

Переходя прямо к нему ...

У меня есть следующий код Python в облачной функции Google

main.py

import flask, requests

def gce_test(request):
  test = {"data": {}, "meta": {}, "error": {}}

  metadata_server = "http://metadata/computeMetadata/v1/instance/"
  metadata_flavor = {'Metadata-Flavor' : 'Google'}

  gce_id = requests.get(metadata_server + 'id', headers = metadata_flavor).text
  gce_name = requests.get(metadata_server + 'hostname', headers = metadata_flavor).text
  gce_machine_type = requests.get(metadata_server + 'machine-type', headers = metadata_flavor).text

  test["data"]["gce_id"] = gce_id
  test["data"]["gce_name"] = gce_name
  test["data"]["gce_machine_type"] = gce_machine_type

  test["meta"]["metadata_server"] = metadata_server
  test["meta"]["metadata_flavor"] = metadata_flavor
  test["meta"]["metadata_server_full"] = metadata_server + 'id'

  test["meta"]['generator'] = 'google-cloud-function'

  return flask.jsonify(test)

Проблема в том, что яя получаю 404 page not found для gce_id , gce_machine_type , gce_name , что означает, что запрос к metadata_server не выполняется...

Мой вопрос: как мне сделать HTTP-запрос Get к metadata_server и передать ему имя экземпляра в качестве параметра ... это выполнимо?

1 Ответ

0 голосов
/ 27 сентября 2018

В настоящее время вы отправляете запросы на URL-адрес сервера метаданных GCE. Облачные функции выполняются поверх стандарта GAE и в результате этого используют URL http://metadata.google.internal. Я привел пример, который работает с текущей облачной функцией для регистрации идентификатора проекта.

import flask, requests

def gce_test(request):
  test = {"data": {}, "meta": {}, "error": {}}

  metadata_server = "http://metadata.google.internal/computeMetadata/v1/project/project-id"
  metadata_flavor = {'Metadata-Flavor' : 'Google'}


  project = requests.get(metadata_server, headers = metadata_flavor).text
  test["data"]["gce_id"] = project
  return flask.jsonify(test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...