Terraform, sua infraestrutura como código.

terraform

Olá pessoal

Estive pesquisando e testando varias ferramentas para agilidade em infraestrutura com enfase em praticas devops.

As ferramentas que tive contato direto e usei foi VSTS no visual Studio que é sensacional, sou suspeito em falar da ferramenta, Ansible que também é sensacional, muito fácil de utilizar.

A grata surpresa foi quando testei a ferramenta da HashiCorp, Terraform.

Minha pesquisa foi por que a administração em ambientes grandes de cloud com acesso a Azure, AWS e Google começa a ter um certo nível de detalhe e camadas de configuração, e até ter um nível bom em segurança da informação para compliances.

Isso é sério e algumas empresas levam a sério como bancos os níveis de acesso e credenciais de acesso a ambientes e níveis de funções como em ambiente de desenvolvimento, em infraestrutura e outros.

Terraform é uma ferramenta para construir, alterar e infra-estrutura de versões com segurança e eficiência em forma de código altamente facil.
O Terraform pode gerenciar varios provedores de serviços em cloud, hibridos e baremetal existentes e populares, como Cloud Computing em Azure, AWS, Google cloud, Oracle Cloud e Digital Ocean, bem como soluções internas personalizadas de datacenter como Openstack, Vmaware e Hyper-V.

O Terraform é capaz de determinar o que mudou e criar planos de execução incremental que podem ser aplicados.

Importante que você tem os versionamentos de mudanças da infraestrutura. Ambientes onde é feito via Gerenciamento de Mudanças você pode criar histórico de relatórios onde a equipe de governança terá total respaldo e controle melhor.

Em tempos de ambientes ágeis o Terraform se torna uma poderosa ferramenta inteligente.

A infraestrutura que o Terraform pode gerenciar inclui componentes de baixo nível, como instâncias de computação, armazenamento e rede, além de componentes de alto nível, como entradas de DNS, recursos de SaaS etc.

Infraestrutura como Código

A infra-estrutura é descrita usando uma sintaxe de configuração de alto nível. Isso permite que um modelo construído do seu data center seja versionado e tratado como você faria com qualquer outro código. Além disso, a infraestrutura pode compartilhada e reutilizada.

Gráfico de recursos

O Terraform constrói um gráfico de todos os seus recursos e paraleliza a criação e modificação de quaisquer recursos não dependentes. Por isso, o Terraform constrói a infraestrutura da maneira mais eficiente possível, e os operadores obtêm insights sobre as dependências de sua infraestrutura.

Automação de Mudança

Os changesets complexos podem ser aplicados à sua infraestrutura com interação humana mínima. Com o plano de execução e o gráfico de recursos mencionados anteriormente, você sabe exatamente o que o Terraform mudará e em que ordem, evitando muitos possíveis erros humanos.

Com um olhar de segurança da informação, seu ambiente de virtualização, hibrido ou em cloud terá o minimo de acesso e o máximo de eficiência e produtividade com segurança.

Terraform vs. concorrentes

O Terraform fornece uma abstração flexível de recursos e provedores. Esse modelo permite representar tudo, desde hardware físico, máquinas virtuais e contêineres, até provedores de e-mail e DNS. Devido a essa flexibilidade, o Terraform pode ser usado para resolver muitos problemas diferentes. Isso significa que existem várias ferramentas existentes que se sobrepõem às capacidades do Terraform. Nós comparamos o Terraform a várias dessas ferramentas, mas deve-se notar que o Terraform não exclusivo com outros sistemas. Pode ser usado para gerenciar um único aplicativo ou o datacenter inteiro.

Veja o comparativo no próprio site do Terraform

https://www.terraform.io/intro/vs/chef-puppet.html

https://www.terraform.io/intro/vs/cloudformation.html

Implantação Multi-Cloud

infraestrutura multi nuven para aumentar a tolerância a falhas. A realização de implantações multi nuvem pode ser muito desafiadora, pois muitas ferramentas existentes para gerenciamento de infraestrutura são específicas da nuvem. O Terraform é agnóstico foi que me interessou e de fácil assimilação, em relação à nuvem e permite que uma única configuração seja usada para gerenciar vários provedores e até mesmo para lidar com dependências entre nuvens. Isso simplifica o gerenciamento e a orquestração, ajudando as operadoras a construir infraestruturas de várias nuvens em grande escala.

Instalação

O Terraform além de ser mutinuvem, hibrido e baremetal ele tem compatibilidade com vários sistema operacionais.

https://www.terraform.io/downloads.html

versoes

Obviamente você utilizará a versão que você mais se familiariza.

Eu vou demonstrar abaixo bem simples no Ubuntu e no Azure que tem pronto no Marketplace.

Ubuntu:

Baixe a versão que está no site

Se não tiver a versão do gunzip e wget ja baixe

apt-get install gunzip wget
wget https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip
unzip terra*

Mova os binários para a pasta /usr/local/bin/
mv terraform /usr/local/bin/
terraform --version

Esta é a forma de usar no ubuntu.

Agora vamos para o Azure.

terraformazure001

Faça a busca do terraform e escolha a maquina virtual.

terraformazure002

Leia atentamente as instruções da maquina virtual do Marketplace.

terraformazure003

Complete as instruções de usuário e senha, localidade, nome da maquina e grupo de recursos do Azure.

terraformazure004

Neste passo é sugerido este modelo de maquina virtual do Terraform, então mantenha ou veja modelos equivalentes.

terraformazure005

Confirme os parâmetro de provisionamento e aguarde as instalações do Terraform.

terraformazure006

Agora só aguardar.

terraformazure007

Maquina instalada com sucesso e vamos acessar.

terraformazure008

Terraform devidamente provisionado e pronto para o uso. Vamos mostrar um modelo de criação de uma maquina no Azure através do Terraform

Para o funcionamento correto do Terraform no Azure instale o pacote do Azure CLI na maquina.

https://docs.microsoft.com/pt-br/cli/azure/install-azure-cli-apt?view=azure-cli-latest

O modelo de template para criação da maquina virtual está aqui abaixo:

variable "resourcename" {
 default = "myResourceGroup"
}

# Configure the Microsoft Azure Provider
provider "azurerm" {
 subscription_id = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
 client_id = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
 client_secret = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
 tenant_id = "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

# Create a resource group if it doesn’t exist
resource "azurerm_resource_group" "myterraformgroup" {
 name = "myResourceGroup"
 location = "eastus"

tags {
 environment = "Terraform Demo"
 }
}

# Create virtual network
resource "azurerm_virtual_network" "myterraformnetwork" {
 name = "myVnet"
 address_space = ["10.0.0.0/16"]
 location = "eastus"
 resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"

tags {
 environment = "Terraform Demo"
 }
}

# Create subnet
resource "azurerm_subnet" "myterraformsubnet" {
 name = "mySubnet"
 resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
 virtual_network_name = "${azurerm_virtual_network.myterraformnetwork.name}"
 address_prefix = "10.0.1.0/24"
}

# Create public IPs
resource "azurerm_public_ip" "myterraformpublicip" {
 name = "myPublicIP"
 location = "eastus"
 resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
 public_ip_address_allocation = "dynamic"

tags {
 environment = "Terraform Demo"
 }
}

# Create Network Security Group and rule
resource "azurerm_network_security_group" "myterraformnsg" {
 name = "myNetworkSecurityGroup"
 location = "eastus"
 resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"

security_rule {
 name = "SSH"
 priority = 1001
 direction = "Inbound"
 access = "Allow"
 protocol = "Tcp"
 source_port_range = "*"
 destination_port_range = "22"
 source_address_prefix = "*"
 destination_address_prefix = "*"
 }

tags {
 environment = "Terraform Demo"
 }
}

# Create network interface
resource "azurerm_network_interface" "myterraformnic" {
 name = "myNIC"
 location = "eastus"
 resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
 network_security_group_id = "${azurerm_network_security_group.myterraformnsg.id}"

ip_configuration {
 name = "myNicConfiguration"
 subnet_id = "${azurerm_subnet.myterraformsubnet.id}"
 private_ip_address_allocation = "dynamic"
 public_ip_address_id = "${azurerm_public_ip.myterraformpublicip.id}"
 }

tags {
 environment = "Terraform Demo"
 }
}

# Generate random text for a unique storage account name
resource "random_id" "randomId" {
 keepers = {
 # Generate a new ID only when a new resource group is defined
 resource_group = "${azurerm_resource_group.myterraformgroup.name}"
 }

byte_length = 8
}

# Create storage account for boot diagnostics
resource "azurerm_storage_account" "mystorageaccount" {
 name = "diag${random_id.randomId.hex}"
 resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
 location = "eastus"
 account_tier = "Standard"
 account_replication_type = "LRS"

tags {
 environment = "Terraform Demo"
 }
}

# Create virtual machine
resource "azurerm_virtual_machine" "myterraformvm" {
 name = "myVM"
 location = "eastus"
 resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
 network_interface_ids = ["${azurerm_network_interface.myterraformnic.id}"]
 vm_size = "Standard_DS1_v2"

storage_os_disk {
 name = "myOsDisk"
 caching = "ReadWrite"
 create_option = "FromImage"
 managed_disk_type = "Premium_LRS"
 }

storage_image_reference {
 publisher = "Canonical"
 offer = "UbuntuServer"
 sku = "16.04.0-LTS"
 version = "latest"
 }

os_profile {
 computer_name = "myvm"
 admin_username = "azureuser"
 }

os_profile_linux_config {
 disable_password_authentication = true
 ssh_keys {
 path = "/home/azureuser/.ssh/authorized_keys"
 key_data = "ssh-rsa AAAAB3Nz{snip}hwhqT9h"
 }
 }

boot_diagnostics {
 enabled = "true"
 storage_uri = "${azurerm_storage_account.mystorageaccount.primary_blob_endpoint}"
 }

tags {
 environment = "Terraform Demo"
 }
}

Acima é um modelo completo de rodar uma maquina através do Terraform.

terraformazure009

Este é o modelo criado acima terraformazurevm.tf

O modelo acima tem todos os parametros para a criação da maquina virtual.

O comando para rodar o terrform é terraform init.

Veja este modelo em baremetal para finalizar em Hyper-V

============================================================================

provider "hyperv" {
 hypervisor = "HV01.contoso.local"
 username = "hv_administrator"
 password = "Password1234!"
}

resource "hyperv_virtual_switch" "application_switch" {
 name = "application_switch"
}

resource "hyperv_virtual_machine" "web" {
 vm_name = "web"
 cpu = 2
 ram_mb = 1024
 switch = "external_switch"
 disable_network_boot = true
 path = "C:\\ClusterStorage\\VMs"

network_adapter {
 name = "inside",
 switch_name = "inside",
 },

storage_disk {
 name = "boot"
 diff_parent_path = "C:\\ClusterStorage\\VHDs\\server2012r2-0.1.0.vhdx"
 }
}

resource "hyperv_virtual_machine" "db" {
 vm_name = "db"
 cpu = 4
 ram_mb = 4096
 switch = "external_switch"
 disable_network_boot = true
 path = "C:\\ClusterStorage\\VMs"

network_adapter {
 name = "inside",
 switch_name = "inside",
 },

storage_disk {
 name = "boot"
 diff_parent_path = "C:\\ClusterStorage\\VHDs\\server2012r2-0.1.0.vhdx"
 }
}

============================================================================

O próximo post iremos entrar mais tecnicamente de como rodar e criar a maquina no azure.

Espero que tenham compreendido como é o Terraform.

Sobre Fabio Silva - MVP Reconnect

MVP Reconnect Microsoft Azure - Entusiasta Office 365 Profissional apaixonado por tecnologia. Perfil generalista mas com profundo conhecimento em varias tecnologias. Mais de 10 anos de skill em ambientes Linux Analista Senior realizando trabalhos: Comunicação unificada Lync 2013, Sharepoint 2013, Exchange 2013, Vmware e Windows 2012 preparado para nuvem, hibrida e on-premisses. Comunicação unificada Lync 2013, Sharepoint 2013, Exchange 2013, Vmware e Windows 2012 preparado para nuvem, hibrida e on-premisses. Implantação de comunicação unificada e mensageria Lync 2013 e Exchange 2013 na empresa Penso Tecnologia. Itcore Consultor Senior em todas soluções Microsoft e Virtualização. Consultor Microsoft e Linux Senior De Julho de 2012 a Março de 2013 Consultor Microsoft e Linux Senior De Maio de 2012 a Setembro de 2012 Tecban (Técnologia Bancaria) Auditor de Sistemas Pleno Março de 2012 a Maio de 2012 Analista de TI Senior Março de 2011 a Março de 2012 Analista de infra-estrutura de redes e desenvolvimento Maio 2007 a Março de 2011 Analista de Redes Março de 2005 a Maio de 2007 Integradora THS Área de Suporte CPD Janeiro de 2004 a Janeiro de 2005 Especializações: Certificado Microsoft Windows 2003, Certificado Zimbra Network Edition, Certificado Sonicwall. Especialização em Messageria Exchange 2007 e 2010. Especialização em Linux

Publicado em 3 de junho de 2018, em Azure, DEVOPS, Linux. Adicione o link aos favoritos. 2 Comentários.

  1. Fabio, há um motivo específico pra você ter criado uma VM pra rodar o terraform?
    Valeu!

    Curtir

Deixe uma resposta para Fabio Silva - MVP Reconnect Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

Project THOR

Technical and Human infrastructure for Open Research

randieri.com

Il blog di Cristian Randieri

TEC OFFICE PRODUTIVO

Tec Office Produtivo é um grupo de treinamentos, dicas e tutorias de informática sobre aplicativos utilizados em escritórios.

Gold Recipes

Gols Recipes

Escadas Especiais

Projetos, fabricação e instalação de escadas em geral

Jaqueline Ramos

Devops & Cloud

Blog do Douglas Romão

MVP Office Apps and Services | Modern Workplace and Business Applications Expert

%d blogueiros gostam disto: