Terraform, getting started
v11 VS v12
- terraform.tfvars
- no necesidad entrecomillar las variables
- *.tf
- no interpolation para el uso de variables
- si aún en expresiones dentro de strings
- en el caso de azure, para usar versión 12, la versión del provider ha de ser >=1.27
- los bloques dentro de un resource han/pueden usar = (línea 25 de la sintaxis para v12)
installs
- visual studio code + plugin terraform
- git
- azure cli
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
:sudo apt-get update sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null AZ_REPO=$(lsb_release -cs) echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | sudo tee /etc/apt/sources.list.d/azure-cli.list sudo apt-get update sudo apt-get install azure-cli
azure SPN
- Tenant: organización. Instancia dedicada de tu AD
- Azure AD: AD para la gestión de permisos en el cloud de Azure
- SPN = Service Principal Name. Cuenta de aplicación para autenticación y autorización para servicios automatizados
- Subscriptions:
- ligadas a un AD (nuestro AD), puede haber varias de ellas
- se puede autorizar a un SPN a una o varias subscripciones
- SPK
- portal → Azure Active Directory → App registrations → ADD
- valores por defecto
- guardar los siguientes valores:
- cliend ID1): ••••••••••
- client_secret: ••••••••••
- en Certificates & secrets → Add a new client secret
- tenant ID: ••••••••••
- Portal → Subscriptions → Evaluación Gratuita (Pay-As-You-Go)
- subscription ID: ••••••••••
- Autorizar a nuestro SPN terraform
- portal → subscriptions → Pay-As-You-Go → IAM → Add a role assignment
- Role = contributor, Assign access to = Azure AD user, group o service principal, terraform
Providers
- En terraform, los providers es la manera de hablar con los diferentes servicios (en cloud)
- el lenguaje de terraform está pensado para ser inteligible para los humanos
- creamos el siguiente script terraform:
provider "azurerm" { version = ">=1.27" client_id = "6c609608-a350-476f-85ff-eaff7e82f981" client_secret = "qW0S]tToc]=]ub8HM7yciLSnwOWh1emD" tenant_id = "c8537169-fe81-494a-a2dd-b4ea067073a1" subscription_id = "2eaf2655-54e9-4b81-843e-86b09fd71ab1" features {} # terraform v12 }
Running terraform
- terraform init: inicialización, descarga según el proveedor, mira los módulos…
- terraform plan: mira los recuros definicos en tu código y los compara con los que existen e indica que acciones se tomarán
- añadimos un resource a nuestro código:
resource "azurerm_resource_group" "web_server_rg" { name = "web-rg" location = "West Europe" }
terraform init
,terraform plan
,terraform apply
,terraform destroy
1)
2s