Packer от Hashicorp
Hashicorp Packer
Packer от компании Hashicorp - это инструмент, который позволяет создавать образы для виртуальных машин (AWS AMI, VMWare, Virtualbox, и много других провайдеров инфраструктуры). Это весьма удобный инструмент для создания своих образов в вирутальной инфраструктуре.
В этой заметке я буду рассматривать Packer в качестве билдера AMI для AWS EC2.
Почему именно в таком амплуа. Этой зметкой я открываю цикл о подходе IaC (Infrastructure as Code) - популярной вещи в DevOps практиках.
Если вы не задумывались никогда о такой вещи, как описание и хранение инфраструктуры в системе контроля версий, то пора посмотреть на это. Ведь это очень удобно:
- версионирование
- история
- возможность отката
- все плюшки хранения кода в CVS
ToC
Конфигурация
Итак, packer - это кроссплатформенная утилита, которую можно легко установить на Windows, Linux или MacOS.
Рассмотрим простую конфигурацию по созданию образа виртуальной машины для EC2:
{
"builders": [
{
"ami_name": "ssh-proxy",
"ami_virtualization_type": "hvm",
"associate_public_ip_address": true,
"instance_type": "t2.small",
"region": "us-east-1",
"source_ami_filter": {
"filters": {
"name": "*ubuntu-xenial-16.04-amd64-server-*",
"root-device-type": "ebs",
"virtualization-type": "hvm"
},
"owners": ["099720109477"],
"most_recent": true
},
"ssh_username": "ubuntu",
"tags": {
"OS_Version": "Ubuntu",
"Release": "16.04"
},
"ssh_keypair_name": "aws",
"ssh_private_key_file": "/opt/.ssh/aws",
"force_deregister": false,
"force_delete_snapshot": true,
"encrypt_boot": true,
"type": "amazon-ebs",
"launch_block_device_mappings": [
{
"device_name": "/dev/sda1",
"volume_size": 10,
"volume_type": "gp2",
"delete_on_termination": true
}
]
}
],
"post-processors": null,
"provisioners": [
{
"execute_command": "{{ .Vars }} sudo -E sh '{{ .Path }}'",
"inline": [
"apt-get -y update",
"apt-get install -y unzip apt-transport-https ca-certificates fail2ban"
],
"type": "shell"
}
]
}
Как вы уже поняли - конфигурация для packer хранится в json-файле. Пройдем по ключевым местам файла:
ami_name
- имя образаinstance_type
- тип инстанса, который будет запущен для создания образаsource_ami_filter
- фильтры, по которым будет производиться поиск операционной системыencrypt_boot
- шифровать диск или нетprovisioners
- в этом разделе указываются провиженеры для системы, т.е. то, что будет инциализировать и конфигурировать ваш образ. В данном случае я использую shell, в котором производится установка пакетов.
Провиженеры могут быть нескольких типов:
- Ansible
- Chef
- Puppet
- Salt
- Shell
- File
- etc.
Посмотрите на них внимательнее. С ними можно сделать практически все. ;)
Запуск
Для запуска сборки образа нужно сохранить конфигурацию в файл и указать параметром:
$ packer build ssh-proxy.json
После этого пойдет сборка в вашем окружении AWS (не забудьте предварительно настроить доступ через API). В логе будет хорошо видно, что именно происходит на каждом этапе. В конце вы получите свой AMI с именем, которое указано у конфигурации.
На этом пока закончим. В продолжении мы рассмотрим Terraform и как с его помощью можно создать всю инфраструктуру в Amazon AWS.
Комментарии: