Packer: O básico

Hello,

No post de hoje darei continuidade a série evolução, com uma breve introdução a ferramenta packer.

PACKER

Packer é uma ferramenta open source da hashicorp para criação de imagem/templates para varias plataformas (VMware, AWS, Azure, etc). Lembrar que, Imagem nada mais é que um ficheiro estático com OS pré instalado/configurado com pacotes de software já embutidos.

A prática de criação de imagens já é bastante comum, por exemplo no vSphere criamos templates para facilitar ou acelerar o provisionamento de servidores, o mesmo acontece com Vagrant que possui boxes e AWS possui Amazon Machine Image (AMI), que permite empacotar OS e software de forma a aumentar agilidade no deploy e versionamento ambientes.

Contudo o processo de criação e update destas imagens era manual e efectuado por ferramentas nativas ou internas de cada plataforma.

Com o Packer podemos automatizar este processo usando HCL “HashiCorp Configuration Language” ou JSON para criar templates “via code”, e o packer tem a vantagem de integrar-se de forma fácil com provisioners e configuration management como Ansible, puppet, terraform para instalação, configuração de pacotes e deploy.

Terminologia/componentes

Template: são ficheiros JSON que contém configuração dos vários componentes do Packer para criar uma ou mais imagens. Template JSON objecto que contem conjunto de configurações chaves dos vários componentes do Packer.

Builders: bloco Responsáveis por construir e indicar/direccionar imagens para várias plataformas. o builders contém uma matriz de todos os construtores que o Packer deve usar para gerar imagens. É no builders que definimos para quais plataformas estamos a gerar a imagem.

Exemplo de builders: VMware, AWS, Azure, Virtualbox, etc.

Provisioners: No provisionadores é onde podemos usar software interno “shell” e de terceiros para instalar e configurar a imagem da máquina após a inicialização ou boot.

O bloco provisioners é opcional e é usado para instalar e configurar software packages, patch, e executar varias ações no momento da criação/construção da imagem.

Exemplo de provisioners: Powershell, Ansible, puppet, Shell….

Post processor: A secção post-processor no template configura qualquer pós-processamento que será feito nas imagens construídas pelos builders, isto é, instruções a serem executadas depois de builders e provisioners.

Post processor é opcional e pode ser usado por exemplo para comprimir a imagem ou fazer upload num repositório.

Variables: Variáveis para ajudar a configurar/actualizar o template com parâmetros e variáveis de ambiente. Muito útil por exemplo para não expor passwords no ficheiro.

Vantagens

Portabilidade;

Multi plataforma (Virtual machine & Containers);

Rápido provisionamento, deploy de infra.

Hands On

Instalação manual

Para instalar packer manualmente é necessário baixar o binário Packer para OS que deseja, e colocar o binário num directório listado na variável $PATH para facilitar execução na linha de comando.

Download packer

https://www.packer.io/downloads

wget https://releases.hashicorp.com/packer/1.6.0/packer_1.6.0_linux_amd64.zip

#extrair no dir /usr/sbin/

unzip packer_1.6.0_linux_amd64.zip -d /usr/sbin/

#test

packer –version  

Atenção a distros CentOS/RedHat já possue binário com nome packer (symbolic link de cracklib-packer) o que cria conflito, então é necessário remover o link ou renomear ou criar 1 symbolic link do hashicorp packer com um nome diferente.

Exemplo

Aqui partilharei este exemplo que:

Cria uma imagem AWS Linux “AMI”, usa provisioners (shell e ansible) para fazer update do OS, instalar apache e setup de uma página.

Outros exemplos “vsphere” podem encontrar no meu repo github: https://github.com/manuh-L/packer

ami.json

  
{
    "builders": [
        {
            "type": "amazon-ebs",
            "access_key": "",
            "secret_key": "",
            "region": "af-south-1",
            "source_ami": "ami-0ec47ddb564d75b64",
            "instance_type": "t3.micro",
            "ssh_username": "",
            "ami_name": "by-packer-{{timestamp}}",
            "ami_description": "AMI by Manuh",
            "tags": {
                "Name": "Apache",
                "Environment": "Dev",
                "OS_Version": "Amazon Linux"
            }
        }
    ],
    "provisioners": [
        {
            "type": "shell",
            "script": "update.sh"
        },
        {
            "type": "ansible",
            "playbook_file": "apache.yml"
        }
    ]
}

apache.yml

---
- name: webserver configuration
  hosts: all
  become: true

  tasks:
    - name: Install Apache
      yum: name=httpd state=present

    - name: Enable Apache Service on boot
      service: name=httpd enabled=yes state=started

    - name: Setting up web page
      copy:
        src: ./index.html
        dest: /var/www/html/index.html

update.sh

#!/bin/bash
sudo yum update -y

index.html

<html>
	<title>
		<head>Hello Apache WebServer</head>
	</title>
	<body>
		<div align="center">
			<h1>  Cockpit </h1>
			<img src="https://manuh.s3.af-south-1.amazonaws.com/Cockpit+web+console.png">
		</div>
	</body>
</html>

#executar

packer build ami.json

OUTPUT:

Image

Finalizando….

Image

Packer é mais uma fantástica ferramenta IaC do ecossistema da hashicorp e usa HCL e JSON que considero mais prático ou fácil que YAML por causa de indentation.

O packer trás consigo a vantagem de ser multi-plataforma, pode acrescentar agilidade numa época de hybrid cloud e multi-cloud, em que podemos ter ambiente dev ou teste no DC on-premise e prod na cloud ou mesmo dev/Qa/prod em provedores public cloud diferentes, com packer podemos administrar vários ambientes/imagens e integrar no pipeline CI/CD.

Outro aspecto interessante, com esta ferramenta podemos atingir imutabilidade “immutable infrastructure”, uma abordagem de versionar a infraestrutura ou server e tornar “descartável em caso de servidores stateless” sem necessidade de upgrade do mesmo server durante o ciclo de vida da aplicação ou efectuar mudanças no servidor “em outras palavras, em termos de update/mudanças tornar o servidor ou infraestrutura versionada read-only”.

Bom caros, não resta mais nada a dizer além de exaltar a simplicidade de ferramentas como esta e encorajar a desenvolvermos skills de coding.

É hora de automatizar!

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s