Метаданные – это сервис, предоставляемый многими хостинг-провайдерами, который позволяет серверу получать доступ к информации о себе. К метаданным относятся пользовательские данные, ID сервера, регион центра обработки данных и IP-адреса. Помимо поиска базовых метаданных, пользователи могут при создании предоставлять своим серверам произвольные пользовательские данные.
Данный мануал охватывает следующие темы:
- Что такое пользовательские данные?
- Как предоставить серверу пользовательские данные?
- Как извлечь метаданные сервера?
Пользовательские данные
Пользовательские данные – это произвольные данные, которые пользователь может предоставить серверу в момент его создания. Пользовательские данные могут быть использованы системой cloud-init; как правило, это происходит во время первой загрузки облачного сервера для выполнения задач или запуска скриптов от пользователя root – это может быть чрезвычайно полезно при создании сервера. Иногда пользовательские данные можно определить для серверов, которые не поддерживают cloud-init, но они не будут автоматически использоваться при первой загрузке.
CloudInit принимает файлы cloud-config или другие скрипты, которые может интерпретировать новый сервер (например, bash-скрипты).
Читайте также: Основы написания скриптов cloud-config
Добавление пользовательских данных
Пользовательские данные нельзя изменить после создания сервера.
Создать сервер можно с помощью API или панели управления. Для этого нужен bash-скрипт. В примерах ниже используется сценарий, который создает сервер Ubuntu, устанавливает Nginx и заменяет стандартный контент index.html именем хоста и IP-адресом сервера.
#!/bin/bash
apt-get -y update
apt-get -y install nginx
export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /usr/share/nginx/html/index.html
Панель управления
При создании сервера в панели управления нужно ввести пользовательские данные в соответствующее поле. Включите пользовательские данные и вставьте их в появившуюся форму. Выберите здесь все необходимые вам параметры (например, здесь можно включить частные сети).
API-интерфейс
Чтобы добавить пользовательские данные при создании сервера через API, нужно поместить их в параметр user_data вашего POST-запроса.
К примеру, чтобы создать сервер Ubuntu 14.04 на 512 Мб по имени metadata.example.com с включенной частной сетью в ЦОД NYC3 с пользовательскими данными, которые представлены выше, нужно запустить в API следующую команду curl (предположим, что пользовательские данные находятся в ~/user-data.yml):
curl -X POST "https://your-api" \
-d'{"name":"metadata.example.com","region":"nyc3","size":"512mb","private_networking":true,"image":"ubuntu-14-04-x64","user_data":
"'"$(cat ~/user-data.yml)"'",
"ssh_keys":[ <SSH KEY IDs> ]}' \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json"
Вы также можете передавать пользовательские данные непосредственно в запрос curl (избегая двойных кавычек):
curl -X POST "https://your-api" \
-d'{"name":"metadata.example.com","region":"nyc3","size":"512mb","private_networking":true,"image":"ubuntu-14-04-x64","user_data":
"#!/bin/bash
apt-get -y update
apt-get -y install nginx
export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /usr/share/nginx/html/index.html",
"ssh_keys":[ <SSH KEY IDs> ]}' \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json"
В <SSH Key ID(s)> нужно указать свой SSH-ключ или контрольную сумму, а в переменной среды $TOKEN – свой персональный Access Tokens.
Извлечение метаданных сервера
Рассмотрим несколько примеров извлечения метаданных.
Чтобы запросить метаданные сервера, отправьте HTTP-запрос GET в API:
http://169.254.169.254/metadata/v1/
Индекс верхнего уровня
Ниже приведен пример использования команды curl для отправки HTTP-запроса GET в верхний уровень конечной точки метаданных сервера, /metadata/v1/:
curl http://169.254.169.254/metadata/v1/
id
hostname
user-data
vendor-data
public-keys
region
interfaces/
dns/
Эта команда отображает индекс доступных метаданных сервера, что может рассматриваться как список каталогов. Элементы со слешем представляют собой индекс, а элементы без него – данные.
Пользовательские данные
С помощью этой команды можно извлечь пользовательские данные сервера:
curl http://169.254.169.254/metadata/v1/user-data
Общий сетевой интерфейс
Ниже приведен пример использования curl для получения внешнего IP-адреса сервера:
curl http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address
Это вернет внешний IP-адрес вашего сервера. Эта конечная точка метаданных вместе с конечной точкой имени хоста была использована в предыдущем разделе, чтобы создать пример файла Nginx index.html.
Заключение
Метаданные сервера улучшают оркестровку облачного сервера, позволяя создавать новые серверы, которые автоматически настраиваются для обеспечения потребностей вашего приложения. Указав соответствующие пользовательские данные, вы можете создавать серверы, которые при загрузке устанавливают и настраивают необходимое программное обеспечение и даже регистрируются в системе обнаружения сервисов.