= 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''