#google-cloud-run #google-cloud-code
# #google-cloud-запустить #google-cloud-code
Вопрос:
Я пытаюсь локально отладить контейнер для запуска в облаке. В моем коде я пытаюсь получить информацию об окружающей среде через computeMetadata.
location = requests.get("http://metadata.google.internal/computeMetadata/v1/instance/region",
headers={'Metadata-Flavor': 'Google'}).text
logging.warning(f"Location set to {location}")
project = requests.get("http://metadata.google.internal/computeMetadata/v1/project/project-id",
headers={'Metadata-Flavor': 'Google'}).text
logging.warning(f"Project set to {project}")
При выполнении этого фрагмента кода я получаю приведенную ниже ошибку.
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='metadata.google.internal', port=80): Max retries exceeded with url: /computeMetadata/v1/instance/region (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb00be99190>: Failed to establish a new connection: [Errno 111] Connection refused'))
Конечно, я ничего не знаю о запуске порта 80 на моем Macbook, который мог бы обслуживать это, и, похоже, в контейнере нет ничего, что могло бы это сделать, поэтому было бы разумно, что он не может подключиться.
Итак, с учетом сказанного, как я могу выполнить этот код локально, чтобы убедиться, что он ведет себя так, как я хочу, перед его развертыванием? На данный момент я заключил его в оператор try / except, но он не идеален для воспроизведения сценариев реального мира.
Комментарии:
1. Я нашел это . Я никогда не тестировал.
2. Правильно, вы не можете получить доступ к серверу метаданных локально. Однако у вас, вероятно, есть локальные учетные данные, установленные с помощью учетных данных приложения по умолчанию с использованием переменной среды
GOOGLE_APPLICATION_CREDENTIALS
. Используя библиотеку Google-auth , вы можете получить свой идентификатор проекта с помощью: « импортировать google. учетные данные для авторизации, project_id = google.auth.default() «3. Что касается местоположения, это немного сложнее, и я бы рекомендовал добавить флаг env var, например
if os.env.PROD: ...
Ответ №1:
Существует несколько эмуляторов, которые вы можете запускать локально.
Гийом указал в комментариях к вопросу на тот, который больше внимания уделял GCE
И совсем недавно Келси Хайтауэр выпустила еще один, посвященный метаданным, доступным в облачном режиме