Packer от Hashicorp

Hashicorp Packer

Packer от компании Hashicorp - это инструмент, который позволяет создавать образы для виртуальных машин (AWS AMI, VMWare, Virtualbox, и много других провайдеров инфраструктуры). Это весьма удобный инструмент для создания своих образов в вирутальной инфраструктуре.

В этой заметке я буду рассматривать Packer в качестве билдера AMI для AWS EC2.

Почему именно в таком амплуа. Этой зметкой я открываю цикл о подходе IaC (Infrastructure as Code) - популярной вещи в DevOps практиках.

Если вы не задумывались никогда о такой вещи, как описание и хранение инфраструктуры в системе контроля версий, то пора посмотреть на это. Ведь это очень удобно:

  1. версионирование
  2. история
  3. возможность отката
  4. все плюшки хранения кода в CVS

ToC

  1. Packer от Hashicorp
  2. Terraform для AWS
  3. AWS VPC с Terraform
  4. AWS EC2 с Terraform
  5. AWS ELB с Terraform

Конфигурация

Итак, 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-файле. Пройдем по ключевым местам файла:

Провиженеры могут быть нескольких типов:

Посмотрите на них внимательнее. С ними можно сделать практически все. ;)

Запуск

Для запуска сборки образа нужно сохранить конфигурацию в файл и указать параметром:

$ packer build ssh-proxy.json

После этого пойдет сборка в вашем окружении AWS (не забудьте предварительно настроить доступ через API). В логе будет хорошо видно, что именно происходит на каждом этапе. В конце вы получите свой AMI с именем, которое указано у конфигурации.

На этом пока закончим. В продолжении мы рассмотрим Terraform и как с его помощью можно создать всю инфраструктуру в Amazon AWS.


Comments !