Cloud Computing

Ξ Deixe um comentário

Terraform – Sua infraestrutura como código

publicado por Fabio Pereira da Silva

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 o 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 é crítico e algumas empresas levam a sério como bancos os níveis e credenciais de acesso a infraestrutura e níveis de funções como em ambiente de desenvolvimento.

Terraform é uma ferramenta para construir, alterar e infraestrutura de versões com segurança e eficiência em forma de código simples.

O Terraform pode gerenciar varios provedores de serviços em cloud, hibridos e baremetal populares, tais 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.

O interessante é que você tem os versionamentos de mudanças da infraestrutura. Nos ambientes onde são feitos o Gerenciamento de Mudanças você pode ter acesso ao histórico da ações via 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 e inteligente ferramenta.

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-nuvem 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 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 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 muti-nuvem, híbrido 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 outros modelos.

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 tem todos os parâmetros para a criação da máquina 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.

  •  
    6
    Shares
  • 4
  • 2
  •  
  •  
  •  
  •  
  •  

Compare preços de Uber, 99 e Taxi

Minimum Way

Autor

MVP Microsoft Azure - Profissional apaixonado por técnolgia. 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.

Fabio Pereira da Silva

Comentários

You must be logged in to post a comment.

Busca

Patrocínio

Publicidade




Siga-nos!

Facebook

Facebook By Weblizar Powered By Weblizar

Newsletter: Inscreva-se

Para se inscrever em nossa newsletter preencha o formulário.