Apresentação e considerações
Quando vamos realizar uma automação utilizando o Terraform por exemplo, precisamos criar mecanismos para deixar o nosso código o mais reaproveitável o possível, evitando ao máximo o tal do hard coded
.
Este artigo é destinado para àqueles que já estão utilizando o Terraform.
Caso queira conhecer mais confira nossos demais artigos e é claro, consulte SEMPRE a documentação oficial.
Entendendo o básico de AMI
Uma AMI
(Amazon Machine Image) é como se fosse um template de uma máquina virtual que possui o necessário para subir seu servidor na nuvem, na AWS para subir uma instância EC2 você sempre terá que escolher qual será a imagem que dará origem a sua instância.
No Market Place da AWS você poderá achar uma infinidade de AMIs para praticamente todos os propósitos, o escopo desse tipo de serviço é baseado em região, ou seja, cada imagem tem um AMI ID único e esse ID só será válido na respectiva região em que a imagem se encontra, uma imagem pode ter o mesmo nome em regiões diferentes, mais nunca o mesmo ID.
Saiba mais sobre AMIs clicando aqui.
Datasources do Terraform
Os datasources permitem que uma configuração do Terraform construa informações definidas fora do Terraform ou definidas por outra configuração separada.
Os providers são responsáveis no Terraform pela definição e implementação dos datasources. Enquanto um recurso faz com que o Terraform crie e gerencie um novo componente de infraestrutura, os datasources apresentam visões readonly de dados preexistentes, ou calculam novos valores rapidamente dentro do próprio Terraform.
Para esse artigo vamos considerar o datasource aws_ami, com ele conseguimos recuperar o ID das AMIs que queremos com base em alguns filtros, e de forma dinâmica conseguimos utilizar essa informação para contruir nossas instâncias.
Exemplos de Datasources
AMI CentOS 7 – Imagem mais recente
Identificação da imagem no Market Place
Terraform datasource – aws_ami
data "aws_ami" "centos" { owners = ["679593333241"] most_recent = true filter { name = "name" values = ["CentOS Linux 7 x86_64 HVM EBS *"] } filter { name = "architecture" values = ["x86_64"] } filter { name = "root-device-type" values = ["ebs"] } }
Referenciando o datasource no resource aws_instance:
ami = "${data.aws_ami.centos.id}"
Clique aqui para ver um artigo que também usei de referência de como filtrar o ID uma imagem CentOS 7.
AMI Amazon Linux – Imagem mais recente
Identificação da imagem no Market Place
Terraform datasource – aws_ami
data "aws_ami" "amazon_linux" { most_recent = true filter { name = "name" values = [ "amzn-ami-hvm-*-x86_64-gp2", ] } filter { name = "owner-alias" values = [ "amazon", ] } }
Referenciando o datasource no resource aws_instance:
ami = "${data.aws_ami.amazon_linux.id}"
AMI Ubuntu 16.04 – Imagem mais recente
Identificação da imagem no Market Place
Terraform datasource – aws_ami
data "aws_ami" "ubuntu1604" { most_recent = true filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*"] } filter { name = "virtualization-type" values = ["hvm"] } owners = ["099720109477"] # Canonical }
Referenciando o datasource no resource aws_instance:
ami = "${data.aws_ami.ubuntu1604.id}"
O Ubuntu tem um EC2 Cloud Images Locator, para localizar o ID das imagens Ubuntu em todas as regiões.
Clicando Aqui também tem um artigo interessante sobre ami Ubuntu no Terraform.
É isso ai, ficamos por aqui, espero que ajude!
Deixe um comentário