Поиск по сайту:

Как получить доступ и использовать метаданные дроплета DigitalOcean


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

Метаданные по умолчанию

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

Капля может получить свои собственные метаданные, позвонив по специальному сетевому адресу 169.254.169.254. Подключитесь к дроплету через SSH и используйте команду curl, чтобы поэкспериментировать с доступными конечными точками API.

Вот базовый пример, который предоставляет список поддерживаемых полей метаданных:

curl http://169.254.169.254/metadata/v1/

Вы можете получить доступ к любому из полей, включенных в выходные данные этой конечной точки, добавив имя поля к базовому URL-адресу API метаданных:

curl http://169.254.169.254/metadata/v1/id

В этом примере в ответе будет указан IP-адрес дроплета.

Поля метаданных

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

  • id – общедоступный IP-адрес дроплета.
  • hostname — имя хоста дроплета, совпадающее с именем, указанным при создании дроплета. Оно может не отражать имя в /etc/hostname, если вы позже измените его вручную.
  • user-data — произвольные данные, предоставляемые пользователем (см. следующий раздел в этом руководстве).
  • vendor-data — данные, выданные DigitalOcean, используемые для настройки дроплета.
  • public-keys — открытые ключи SSH, которые были добавлены в дроплет при его создании через панель управления или API. Эти ключи автоматически добавляются в учетную запись root.
  • region – центр обработки данных DigitalOcean, в котором находится дроплет, например nyc1 или lon1.
  • interfaces — предоставляет сведения о сетевых интерфейсах дроплета. Ответ будет содержать поля private и public, каждое из которых представляет собой массив объектов, описывающих настроенные сетевые интерфейсы. Детали включают ipv4 для получения IP-адреса и mac, сообщаемый MAC-адрес дроплета в этой сети.
  • floating_ip — когда дроплету назначается плавающий IP-адрес DigitalOcean, в этом поле отображаются его данные.
  • dns – содержит подполе nameservers, в котором перечислены серверы имен, используемые дроплетом при выполнении поиска DNS.
  • теги – предоставляет список всех созданных пользователем тегов, назначенных дроплету.
  • features — объект, описывающий функции DigitalOcean, активированные для дроплета.

Поля, содержащие вложенные данные или массивы объектов, можно просматривать с помощью конечных точек API. Вот пример, который предоставляет IP-адрес первого частного сетевого интерфейса дроплета:

curl http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address

Это упрощает извлечение определенных значений для использования в ваших сценариях. Вам не всегда нужно вручную анализировать тело ответа JSON.

После того, как вы получили идентификатор своего дроплета, ваши скрипты могут обращаться к обычному API DigitalOcean для получения дополнительной информации или выполнения действий с дроплетом. Например, вы можете захотеть создать снимок перед запуском деструктивной последовательности команд. Ваш сценарий может использовать API метаданных для обнаружения идентификатора дроплета, на котором он работает, а затем передать идентификатор REST API моментальных снимков для создания нового моментального снимка. Сценарий по-прежнему будет переносимым для разных дроплетов, поскольку вы не жестко кодируете идентификатор.

Получение всех доступных метаданных

Вы можете получить все метаданные, связанные с дроплетом, добавив .json к базовой конечной точке API:

curl http://169.254.169.254/metadata/v1.json

Это предоставит объект JSON, содержащий все поля, описанные выше. Поля с символом - (дефис) будут преобразованы в использование _ (подчеркивание) вместо JSON.

Данные пользователя

DigitalOcean позволяет вам предоставлять пользовательские данные при создании нового дроплета. Его можно указать либо через форму на панели управления, либо с флагом --user-data, когда вы используете создание дроплета вычислений doctl. Пользовательские данные отображаются в поле user-data в API метаданных.

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

Пользовательские данные передаются в cloud-init. Эта программа запускается при первой загрузке дроплета и действует как механизм для автоматизации первоначальной настройки. Чтобы использовать cloud-init, добавьте содержимое файла YAML, совместимого с cloud-config, в user-data вашего дроплета. Этот пример обновляет все существующие пакеты, записывает файл и создает новую учетную запись пользователя:

users:
  name: example
  groups: sudo
  shell: /bin/bash
write_files:
  - path: /example.txt
    content: "Arbitrary data here"
package_update: true

Другие способы доступа к метаданным

API метаданных — это служба, доступная только внутри дроплета. Вы взаимодействуете с ним, используя curl, альтернативные терминальные HTTP-клиенты или HTTP-библиотеку вашего языка программирования в скриптах. DigitalOcean предоставляет официальную клиентскую библиотеку для Go, которая служит базовой оболочкой для API.

Вы не можете напрямую запрашивать метаданные дроплета извне. Ни Doctl CLI, ни основной REST API DigitalOcean не поддерживают получение точной структуры данных, предоставляемой службой метаданных в капле.

Если вы хотите получить доступ к деталям дроплета, таким как сетевые интерфейсы, теги и конфигурация системы извне, вам нужно будет использовать другие функции API и Doctl. Команда doctl Compute Droplet Get — хорошая отправная точка, которая предоставляет большую часть той же информации, что и служба метаданных, а также некоторые дополнительные сведения, включая ограничения аппаратных ресурсов.

Краткое содержание

Служба метаданных DigitalOcean — это специальный API, к которому вы можете получить доступ внутри ваших дроплетов. Это помогает вам создавать сценарии, которые должны ссылаться на ключевые атрибуты вашего дроплета, такие как его идентификатор, регион центра обработки данных или IP-адрес.

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

Метаданные всегда специфичны для отдельного дроплета. API существует для предоставления механизма самоанализа дроплетов. Используйте обычный REST API напрямую или через Doctl, если вы хотите запросить свою учетную запись DigitalOcean, чтобы найти другие дроплеты с похожими атрибутами.