Amazon ec2 user-data, как это работает? - PullRequest
52 голосов
/ 19 марта 2012

Мы запускаем экземпляры и получаем доступ к пользовательским данным, которые мы размещаем. Но кто-нибудь понимает внутренности этой операции (со стороны Amazon)? Когда мы передаем пользовательские данные, в какой момент эти данные передаются на виртуальную машину (это функция Xen) и где они хранятся?

Сначала я подумал, что он задан как переменная USER_DATA env, но мы также можем передать ее в виде файла. Где хранится этот файл? Это универсально для всех случаев или варьируется в зависимости от AMI?

Это не проблема как таковая, просто хотелось узнать, как это делает Amazon.

Скриншот данных пользователя: http://d.pr/GZlY

Ответы [ 5 ]

59 голосов
/ 19 марта 2012

Пользовательские данные доступны экземпляру с помощью простого HTTP-запроса по этому URL:

http://169.254.169.254/latest/user-data

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

См. также:

7 голосов
/ 03 октября 2017

Простой пример для всеобщего понимания: если вы хотите создать файл /tmp/testfile.txt при запуске машины, вы можете просто добавить эти две строки в поле User data.

#!/bin/bash
touch /tmp/testfile.txt

Не забудьте поставить #!/bin/bash вверху перед вашими командами.

Когда вы запускаете экземпляр (Linux AMI), вы можете увидеть содержимое поля User data в /var/lib/cloud/instance/user-data.txt

3 голосов
/ 03 апреля 2018

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

Большинство документов AWS описывают данные пользователя как свойство, в которое помещается жизненный цикл экземплярасценарии запуска, то есть то, что вы хотите запускать только при первом запуске экземпляра.

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

Вот код и ссылка на документ AWS ...

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World." >> /tmp/sdksdfjsdlf
--//

Iне может найти документацию по этому форматированию пользовательских данных, которая позволяет этому произойти.Я попробовал это, и это работает.Я пытался проверить, запускается ли он при каждом запуске, и он работает.

Итак, если вы считаете, что вам нужно это сделать, я рекомендую вам сделать резервную копию.Убедитесь, что у вас есть копия исходных пользовательских данных, и используйте предоставленный код, измененный для набора, и удалите код при следующей остановке экземпляра (чтобы избежать многократного запуска сценария).

1 голос
/ 25 апреля 2017

AWS userdata - это набор команд / данных, которые вы можете предоставить экземпляру во время запуска. Например, если вы запускаете экземпляр ec2 и хотите установить докер на только что запущенном ec2, вы можете предоставить набор команд bash в поле userdata страницы конфигурации aws ec2.

Usecase

Здесь - хорошо объясненный пример пользовательских данных AWS с видеоуроком

0 голосов
/ 22 февраля 2019
#!/bin/bash
yum update -y
yum install httpd -y
echo "<html><h1>webpage 1(whatever you want, give the page name here)</h1></html>"
/var/www/html/index.html
service httpd start
chkconfig httpd on
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...