2016-05-10 10 views
3

В AWS, чтобы создать новый AMI, я обычно запускаю команды вручную, чтобы убедиться, что они работают, а затем я создаю это окно для создания AMI. Но есть ли такие альтернативы, как packer.io, что является минимальным рабочим примером для использования этой службы для создания простой персонализированной AMI?Как создать машину EC2 с упаковщиком?

+1

Документы Packer содержат [пример] (https://www.packer.io/docs/builders/amazon-ebs.html) (около 3/4 пути вниз); это помогает, или были ли другие проблемы, с которыми вы столкнулись? – Castaglia

+0

У них на самом деле нет учебника, я нашел этот пример очень непрозрачным ... –

+0

Это просто слайды, но Ланс Альбертсон из OSUOSL в прошлом году отлично поделился с LinuxCon Seattle на Packer, вы можете найти слайды полезными. Это был хороший обзор. http://schd.ws/hosted_files/lccocc2015/89/packer.pdf –

ответ

3

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

Удачи!

+0

Примечание. У Packer теперь есть раздел в своих документах о том, как использовать устройство для обеспечения шеф-повара, чтобы хак больше не нужен. Просто проверьте документы: –