= Terraform, getting started == v11 VS v12 * **terraform.tfvars** * no necesidad entrecomillar las variables {{ :info:cursos:udemy:terraform-azure:pasted:20200329-083450.png }} * **%%*%%.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) {{ :info:cursos:udemy:terraform-azure:pasted:20200329-083502.png }} == 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 * [[https://docs.microsoft.com/ca-es/cli/azure/?view=azure-cli-latest]] == 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 ID((2s)): U2FsdGVkX1/CZUNBL8CTxHiwQMGuHk57OsmO5A9xcBryE/wyXP9e7AYqKAnMAlNr tBF7StmuLZ2HWJQMxbr1Qg== * client_secret: U2FsdGVkX1/11KRBwyWbP5l4c4j7dZ3EkZ6XL5PoUiNMyKuShA0M4Uj0NMUQ6duB wVCzdDkfSh8rxe0qDoElsg== * en Certificates & secrets -> Add a new client secret * tenant ID: U2FsdGVkX1+YmWaFctJG1HnsOiKqwsrMrp+VD0lG8i7K7xa+VWKBNu7jsVUn47kl EOWJGtb2BjDJ7YQTQEFkGA== * Portal -> Subscriptions -> Evaluación Gratuita (Pay-As-You-Go) * subscription ID: U2FsdGVkX19q6uT0LG6fZXvjgH/G6vS2GYjPqU1q1bU0TWKXbSqezgyStlykeapc DUnQyBxaxaddFbwLvZ/NVg== * 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" } * [[https://azure.microsoft.com/en-us/global-infrastructure/locations/]] * ''terraform init'', ''terraform plan'', ''terraform apply'', ''terraform destroy''