В AWS, чтобы создать новый AMI, я обычно запускаю команды вручную, чтобы убедиться, что они работают, а затем я создаю это окно для создания AMI. Но есть ли такие альтернативы, как packer.io, что является минимальным рабочим примером для использования этой службы для создания простой персонализированной AMI?Как создать машину EC2 с упаковщиком?
ответ
https://github.com/devopracy/devopracy-base/blob/master/packer/base.json Существует файл пакера, который очень похож на то, что я использую для работы для базового изображения. Это не проверено, но мы можем немного в него поработать. Базовое изображение - это моя собственная база - все службы построены с использованием его как источника ami. Таким образом, я контролирую свои зависимости и гарантирую, что в моих службах есть совместимые ОС. Вы могли бы просто добавить кулинарные книги из супермаркета шеф-повара, чтобы узнать, как обеспечить обслуживание службы этим файлом или использовать его в качестве базы. В качестве базы вы сделали бы подобную, менее подробную сборку для службы и назовите ее как источник ami.
Эта первая часть объявляет переменные, которые я использую для упаковки. Переменные вводятся перед сборкой из файла bash, который я НЕ ПРОВЕРЯЮ К УПРАВЛЕНИЮ ИСТОЧНИКОМ. Я сохраняю сценарий bash в своем домашнем каталоге и отправляю его перед вызовом сборки пакета. Обратите внимание, что есть путь поваренной книги для помощника повара. Я использую base_dir
в качестве местоположения в своем блоке dev или сервере сборки. Я использую ключ bootstrap для сборки; упаковщик сделает свой собственный ключ для ssh, если вы его не укажете, но хорошо сделать ключ на aws, а затем запустить с ним свои сборки. Это упрощает отладку пакера на лету.
"variables": {
"aws_access_key_id": "{{env `AWS_ACCESS_KEY`}}",
"aws_secret_key": "{{env `AWS_SECRET_ACCESS_KEY`}}",
"ssh_private_key_file": "{{env `SSH_PRIVATE_KEY_FILE`}}",
"cookbook_path": "{{env `CLOUD_DIR`}}/ops/devopracy-base/cookbooks",
"base_dir": "{{env `CLOUD_DIR`}}"
},
В следующей части файла есть строитель. Я использую amazon-ebs на работе и вне работы тоже, проще создать один файл, и часто более крупные типы экземпляров доступны только как ebs. В этом файле я изменяю размер, поэтому у нас есть немного больше места для установки материалов. Обратите внимание, что источник ami здесь не указан, я просматриваю самую новую версию здесь или там. Ubuntu имеет удобный сайт, если вы его используете, просто локатор google ec2 ubuntu. Вам нужно добавить исходное изображение для создания.
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key_id`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "us-west-2",
"source_ami": "",
"instance_type": "t2.small",
"ssh_username": "fedora",
"ami_name": "fedora-base-{{isotime \"2006-01-02\"}}",
"ami_description": "fedora 21 devopracy base",
"security_group_ids": [ "" ],
"force_deregister": "true",
"ssh_keypair_name": "bootstrap",
"ssh_private_key_file": "{{user `ssh_private_key_file`}}",
"subnet_id": "",
"ami_users": [""],
"ami_block_device_mappings": [{
"delete_on_termination": "true",
"device_name": "/dev/sda1",
"volume_size": 30
}],
"launch_block_device_mappings": [{
"delete_on_termination": "true",
"device_name": "/dev/sda1",
"volume_size": 30
}],
"tags": {
"stage": "dev",
"os": "fedora 21",
"release": "latest",
"role": "base",
"version": "0.0.1",
"lock": "none"
}
}],
Очень полезно пометить ваши изображения, когда вы начинаете выполнять автоматизацию на облаке. Эти теги - это то, как вы будете обрабатывать свои развертывания и т. Д. fedora
является пользователем по умолчанию для fedora, ubuntu
для ubuntu, ec2-user
для amazon linux и т. Д. Вы можете посмотреть их в документах для своего дистрибутива.
Аналогичным образом вам необходимо добавить группу безопасности в этот файл и подсеть для запуска. Packer будет использовать значения по умолчанию в aws, если вы не укажете их, но если вы строите на сервере-сборщике или нет, -default vpc, вы должны указать. Заменить регистратор будет избавляться от ami с тем же именем в успешной сборке - я по дате, так что я могу выполнять итерацию в сборках ежедневно, а не накапливать кучу изображений.
Наконец, я использую помощник повара. У меня есть кулинарная книга в другом репо, и путь к ней на сервере builds - это переменная наверху. Здесь мы смотрим на шеф-повар для обеспечения, который технически не поддерживается, но отлично работает с клиентом-шеф-поваром и пользовательской командой. Помимо запуска шеф-повара, я делаю некоторые собственные скрипты и следую за ним, выполняя тесты на серверы, чтобы убедиться, что все неловкое.
"provisioners": [
{
"type": "shell",
"inline": [
]
},
{
"type": "shell",
"script": "{{user `base_dir`}}/ops/devopracy-base/files/ext_disk.sh"
},
{
"type": "shell",
"inline": [
"sudo reboot",
"sleep 30",
"sudo resize2fs /dev/xvda1"
]
},
{
"type": "shell",
"inline": [
"sudo mkdir -p /etc/chef && sudo chmod 777 /etc/chef",
"sudo mkdir -p /tmp/packer-chef-client && sudo chmod 777 /tmp/packer-chef-client"
]
},
{
"type": "file",
"source": "{{user `cookbook_path`}}",
"destination": "/etc/chef/cookbooks"
},
{
"type": "chef-client",
"execute_command": "cd /etc/chef && sudo chef-client --local-mode -c /tmp/packer-chef-client/client.rb -j /tmp/packer-chef-client/first-boot.json",
"server_url": "http://localhost:8889",
"skip_clean_node": "true",
"skip_clean_client": "true",
"run_list": ["recipe[devopracy-base::default]"]
},
{
"type": "file",
"source": "{{user `base_dir`}}/ops/devopracy-base/test/spec",
"destination": "/home/fedora/spec/"
},
{
"type": "file",
"source": "{{user `base_dir`}}/ops/devopracy-base/test/Rakefile",
"destination": "/home/fedora/Rakefile"
},
{
"type": "shell",
"inline": ["/opt/chef/embedded/bin/rake spec"]
},
{
"type": "shell",
"inline": ["sudo chmod 600 /etc/chef"]
}
]
}
Естественно, есть некоторые Гуфи бизнес здесь вокруг chmoding от шеф-Dir, и это, очевидно, не безопасный - я бегу мой строит в частной подсети. Надеюсь, это поможет вам сойти с ног с помощью пакера, который на самом деле является удивительной частью программного обеспечения и весело! Пинг меня в комментариях с любыми вопросами или ударил меня по github. Все предметы, посвященные devopracy, являются WIP, но эти файлы, вероятно, созреют, когда у меня будет больше времени для работы над этим: P
Удачи!
Примечание. У Packer теперь есть раздел в своих документах о том, как использовать устройство для обеспечения шеф-повара, чтобы хак больше не нужен. Просто проверьте документы: –
Документы Packer содержат [пример] (https://www.packer.io/docs/builders/amazon-ebs.html) (около 3/4 пути вниз); это помогает, или были ли другие проблемы, с которыми вы столкнулись? – Castaglia
У них на самом деле нет учебника, я нашел этот пример очень непрозрачным ... –
Это просто слайды, но Ланс Альбертсон из OSUOSL в прошлом году отлично поделился с LinuxCon Seattle на Packer, вы можете найти слайды полезными. Это был хороший обзор. http://schd.ws/hosted_files/lccocc2015/89/packer.pdf –