Criando imagens personalizadas com Packer para Google Cloud Platform
Olá pessoal, hoje no blog da 4Linux, vamos falar dessa ferramenta sensacional que é o Packer da HashiCorp. Bora lá.
O que é o Packer
O Packer é uma ferramenta de automação de criação de imagens desenvolvida pela HashiCorp. Ele permite criar imagens de máquinas virtuais ou contêineres de forma automatizada, garantindo a criação de imagens consistentes e prontas para serem implantadas em diferentes plataformas.
Com o Packer, você pode definir as configurações da imagem em um arquivo de configuração declarativo, especificando o sistema operacional, as dependências, as configurações do aplicativo e outras personalizações desejadas. Em seguida, o Packer cria a imagem executando esse arquivo de configuração, provisionando e configurando uma instância temporária da máquina virtual ou do contêiner e, em seguida, capturando essa instância em uma imagem final.
O Packer suporta várias plataformas de virtualização, como Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), VMware, Docker e outros. Ele também é extensível e permite que você crie seus próprios plugins para suportar plataformas adicionais.
Instalação
Linux
Ubuntu/Debian:
Adicione a GPG Key da HashiCorp:
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
Adicione o repositório oficial HashiCorp Linux:
`sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
Atualize o repositório e faça a instalação:
sudo apt-get update && sudo apt-get install packer
Validando instalação*
packer
Usage: packer [--version] [--help] <command> [<args>]
Available commands are:
build build image(s) from template
console creates a console for testing variable interpolation
fix fixes templates from old versions of packer
fmt Rewrites HCL2 config files to canonical format
hcl2_upgrade transform a JSON template into an HCL2 configuration
init Install missing plugins or upgrade plugins
inspect see components of a template
validate check that a template is valid
version Prints the Packer version
Criando imagem personalizada
Vamos criar a nossa imagem personalizada com o Docker já instalado nela. Para isso, primeiro vamos criar um arquivo chamado docker.sh
da seguinte forma:
docker.sh
sudo apt-get update -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -y
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
Posteriormente, vamos criar nosso arquivo Packer com o seguinte conteúdo e no formato JSON.
ubuntu-docker.json
{
"builders": [
{
"type": "googlecompute",
"project_id": "seu-id-do-projeto",
"source_image_family": "ubuntu-1804-lts",
"zone": "us-central1-a",
"ssh_username": "emerson",
"image_name": "ubuntu-docker",
"image_family": "ubuntu-1804-lts",
"disk_size": "10",
"tags": ["docker"],
"metadata": {
"4labs": "dev"
}
}
],
"provisioners": [
{
"type": "shell",
"script": "docker.sh"
}
]
}
Para entender melhor o nosso arquivo do Packer:
type: tipo de builder, no caso vamos suar a GCP.
project_id: Id do projeto na GCP.
source_image_family: Versão do S.O escolhido como imagem base.
zone: Região da imagem
ssh_username: Usuário que vai ser criado.
image_name: Nome da imagem personalizda que será criada.
image_family: Label para definir se a imagem é do Debian, Ubuntu, RHEL, etc.
disk_size: Tamanho do disco da imagem.
Por fim temos os parametros referente ao provisioners
:
type: Tipo de de provisionamento, por exemplo, ShellScript script: Nome do Script
Construindo nossa imagem
Após criação do nosso arquivo Packer e o Script para inicializar o Docker nessa imagem personalizada, vamos validar nossas configurações com o seguinte comando:
$ packer validate ubuntu-docker.json
The configuration is valid.
Pronto. Bora fazer o nosso deploy. Antes, faça o login na GCP e ative as APIS abaixo em sequência:
gcloud auth application-default login
gcloud services enable sourcerepo.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable servicemanagement.googleapis.com
gcloud services enable storage-api.googleapis.com
gcloud services enable compute
Build da nossa imagem:
packer build ubuntu-docker.json
Output:
googlecompute: output will be in this color.
==> googlecompute: Checking image does not exist...
==> googlecompute: Creating temporary RSA SSH key for instance...
==> googlecompute: Using image: ubuntu-1804-bionic-v20230605
==> googlecompute: Creating instance...
googlecompute: Loading zone: us-central1-a
googlecompute: Loading machine type: n1-standard-1
googlecompute: Requesting instance creation...
googlecompute: Waiting for creation operation to complete...
googlecompute: Instance has been created!
==> googlecompute: Waiting for the instance to become running...
googlecompute: IP: 34.172.43.120
==> googlecompute: Using SSH communicator to connect: 34.172.43.120
==> googlecompute: Waiting for SSH to become available...
==> googlecompute: Connected to SSH!
==> googlecompute: Provisioning with shell script: docker.sh
Nesse processo de Build, o Packer vai criar uma Instância na GCP e criar a nossa imagem personalizada com o script que criamos.
Se acessarmos https://console.cloud.google.com/compute/images?tab=images&authuser=4&hl=pt-br&project=ID_do_PROJETO vamos visualizar nossa imagem criada(Insira o ID do seu projeto no final da URL).
Por hoje é só pessoal! E assim conseguimos criar uma imagem personalizada para a GCP usando o Packer. Em breve volto com mais possibilidades com ele. Não esqueça de compartilhar esse artigo em suas redes sociais.
Até breve.
Referências:
https://www.packer.io/use-cases/automated-machine-images
https://developer.hashicorp.com/packer/tutorials/docker-get-started/get-started-install-cli
https://cloud.google.com/build/docs/building/build-vm-images-with-packer?hl=pt-br
Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:
About author
Você pode gostar também
Guia completo para instalar e configurar o Nextcloud em seu sistema
O que é Nextcloud? O Nextcloud é uma aplicação OpenSource (Código Aberto) para armazenamento de arquivos/pastas entre grupos e usuários em nuvem, sendo acessível tanto por um navegador ou client
Como fazer deploy de uma aplicação Go no Google Cloud Run com Github Actions
Eai galera! Nesse post, o objetivo é mostrar que nem sempre é preciso um Kubernetes ou Jenkins para colocar as suas aplicações no ar. Vamos criar uma Instância no Cloud
MLOps: A chave para o sucesso na implantação de Machine Learning
Um projeto de Machine Learning (ML) de sucesso depende de implantação profissional. Muitas organizações ainda não estão preparadas para fazer implantação de modelos de ML por falta de profissionais especializados.