Получить вычислительные метаданные из движка приложения, ошибка 404 страницы не найдена - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь получить весь проект metadata из движка приложения, URL-адрес выглядит так:

http://metadata.google.internal/computeMetadata/v1/project/attributes/IT_EBOOKS_API

stackdriver logging выдает мне ошибку:

message: '404 - "404 page not found\\n"',

Но я могу получить metadata из вычислительного движка.Вот вывод metadata:

novaline_dulin@test:~$ curl http://metadata.google.internal/computeMetadata/v1/project/attributes/IT_EBOOKS_API -H 
"Metadata-Flavor: Google"
http://it-ebooks-api.info/v1novaline_dulin@test:~$ 

А вот мой код для получения пользовательского проекта metadata

const request = require('request-promise');

async function getMetaData(attr) {
  const url = `http://metadata.google.internal/computeMetadata/v1/project/attributes/${attr}`;
  const options = {
    headers: {
      'Metadata-Flavor': 'Google'
    }
  };
  console.log('url:', url);
  return request(url, options)
    .then((response) => {
      console.info(`Retrieve meta data successfully. meta data: ${response}`);
      return response;
    })
    .catch((err) => {
      console.error('Retrieve meta data failed.', err);
      return '';
    });
}

Что-то не так?спасибо.

обновление

Я могу получить project-id с metadata сервера правильно.Вот код:

const METADATA_PROJECT_ID_URL = 'http://metadata.google.internal/computeMetadata/v1/project/project-id';

async function getProjectId() {
  const options = {
    headers: {
      'Metadata-Flavor': 'Google'
    }
  };

  return request(METADATA_PROJECT_ID_URL, options)
    .then((response) => {
      console.log('response: ', response);
      return response;
    })
    .catch((err) => {
      if (err && err.statusCode !== 200) {
        console.log('Error while talking to metadata server.');
        return 'Unknown_Project_ID';
      }
      return Promise.reject(err);
    });
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Наконец-то я нашел причину, это метаданные api версия проблема.

Вместо использования

http://metadata.google.internal/computeMetadata/v1beta/project/attributes/${attr}

использование

http://metadata.google.internal/computeMetadata/v1/project/attributes/${attr}

Теперь я могу получить metadata из гибкой среды ядра приложения.

{"IT_EBOOKS_API":"http://it-ebooks-api.info/v1","PROJECT_ID":"just-aloe-212502","API_KEY":"12j28flsrbapznq"}

Но для GAE стандартная среда и GCF. Еще получите 404 page not found

Так что я думаю, но не уверен, что стандартные среды GCF и GAE не работают в вычислительном движке.

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

0 голосов
/ 21 ноября 2018

Некоторое время назад это было невозможно в стандартной среде, см. Есть ли способ получить доступ к службе метаданных Google Cloud из AppEngine Standard для настройки во время выполнения?

Новещи, кажется, меняются.

В документации по стандартному окружению (1-го поколения) упоминается службы метаданных, , но :

  • только для java песочницы
  • потенциально ограниченная область действия - только подмножество упомянутых конечных точек, возможно, сконфигурированное пользователем, действительно, не охватывается.Но это может быть вопросом интерпретации (выделено мной):

В следующей таблице перечислены конечные точки , где вы можете выполнять HTTP-запросы для определенных метаданных.

  • только для чтения:

Примечание : доступ к метаданным в настоящее время доступен только для чтения: вы не можете записать свои собственные метаданные для экземпляра.

Это означает, что ограничение DNS, сделавшее невозможным некоторое время назад, было устранено.Поскольку вы можете получать данные в гибкой среде, это означает, что они существуют, и вы на самом деле не пытаетесь их записать, поэтому то, что вы испытываете, также не связано с ограничением только для чтения.

Похоже, что действительно нужная служебная функция / конечная точка, скорее всего, недоступна / функциональна, по крайней мере для go песочницы (если не для всех), а не просто случайное упущение документации (который можно заподозрить / надеяться).

...