Terraform, getting started

  • 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)

  • 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
  • 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
  • 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
    }
  • 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
  • info/cursos/udemy/terraform-azure/getting-started.txt
  • Darrera modificació: 29/03/2020 10:22
  • per mate