Ответ 1
cloud-init - очень мощный, но очень недокументированный инструмент. Даже после того, как он был установлен, есть много модулей по умолчанию, которые перезаписывают вещи, которые вы, возможно, уже определили в своем AMI. Вот инструкции по минимальной настройке с нуля:
Инструкции
-
Установите cloud-init из стандартного репозитория. Если вы беспокоитесь о PCI, вы, вероятно, не захотите использовать пользовательские репозитории AWS.
# rpm -Uvh https://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install cloud-init
-
Измените
/etc/cloud/cloud.cfg
, файл yaml, чтобы отразить желаемую конфигурацию. Ниже приведена минимальная конфигурация с документацией для каждого модуля.#If this is not explicitly false, cloud-init will change things so that root #login via ssh is disabled. If you don't want it to do anything, set it false. disable_root: false #Set this if you want cloud-init to manage hostname. The current #/etc/hosts file will be replaced with the one in /etc/cloud/templates. manage_etc_hosts: true #Since cloud-init runs at multiple stages of boot, this needs to be set so #it can log in all of them to /var/log/cloud-init. syslog_fix_perms: null #This is the bit that makes userdata work. You need this to have userdata #scripts be run by cloud-init. datasource_list: [Ec2] datasource: Ec2: metadata_urls: ['http://169.254.169.254'] #modules that run early in boot cloud_init_modules: - bootcmd #for running commands in pre-boot. Commands can be defined in cloud-config userdata. - set-hostname #These 3 make hostname setting work - update-hostname - update-etc-hosts #modules that run after boot cloud_config_modules: - runcmd #like bootcmd, but runs after boot. Use this instead of bootcmd unless you have a good reason for doing so. #modules that run at some point after config is finished cloud_final_modules: - scripts-per-once #all of these run scripts at specific events. Like bootcmd, can be defined in cloud-config. - scripts-per-boot - scripts-per-instance - scripts-user - phone-home #if defined, can make a post request to a specified url when done booting - final-message #if defined, can write a specified message to the log - power-state-change #can trigger stuff based on power state changes system_info: #works because amazon linux AMI is based on CentOS distro: amazon
-
Если в
/etc/cloud/cloud.cfg.d/
естьdefaults.cfg
, удалите его. -
Чтобы воспользоваться этой конфигурацией, определите следующие пользовательские данные для новых экземпляров:
#cloud-config hostname: myhostname fqdn: myhostname.mydomain.com runcmd: - echo "I did this thing post-boot" - echo "I did this too"
Вы также можете просто запустить bash script, заменив
#cloud-config
на#!/bin/bash
и помещая bash script в тело, но если вы это сделаете, вы должны удалить все имя хоста, связанных сcloud_init_modules
.
Дополнительные примечания
Обратите внимание, что это минимальная конфигурация, и cloud-init способен управлять пользователями, ключами ssh, точками подключения и т.д. Посмотрите приведенные ниже ссылки для дополнительной документации по этим конкретным функциям.
В общем, кажется, что cloud-init делает материал на основе указанных модулей. Некоторые модули, такие как "disable-ec2-metadata", делают вещи просто путем указания. Другие, такие как "runcmd", только делают вещи, если указаны их параметры, либо в cloud.cfg, либо в пользовательских данных cloud-config. Большая часть приведенной ниже документации только сообщает вам, какие параметры возможны для каждого модуля, а не то, что вызывается этим модулем, но по умолчанию для cloud.cfg должен быть полный список модулей. Лучший способ, которым я нашел отключить модуль, - это просто удалить его из списка.
В некоторых случаях "rhel" может работать лучше для тега "distro", чем "amazon". Я действительно не понял, когда.
Ссылки
- Как установить cloud-init: http://web.archive.org/web/20140925130743/http://docs.openstack.org/grizzly/openstack-image/content/centos-image.html
- Ссылка на модули (неполная): http://cloudinit.readthedocs.org/en/latest/topics/examples.html
- Ссылка на модули (неполная): https://github.com/number5/cloud-init/blob/master/doc/examples/cloud-config.txt
- Общие инструкции по установке: http://web.archive.org/web/20150110200930/http://www.scalehorizontally.com/2013/02/24/introduction-to-cloud-init
- Управление хостом: http://web.archive.org/web/20140805225413/http://docs.openstack.org/user-guide/content/user-data.html