Práctica de Terraform, parte 2: uso de Terraform para implementar recursos en la nube

A continuación, demostraremos cómo Terraform implementa los recursos. Tomando Azure como ejemplo, primero debemos preparar la CLI de Azure. La CLI se puede usar para la autenticación. Terraform en sí no tiene función de autenticación. Cómo determinar si tenemos permiso para continuar La implementación / cambio de recursos depende principalmente de la plataforma en la nube, por lo que primero debemos verificar nuestra identidad antes de implementar y cambiar los recursos de la nube.

La CLI de Azure puede usar el principio del servicio para iniciar sesión, primero podemos crear un SP

$ sp = New-AzADServicePrincipal -Scope / subscriptions / 6dxxxxxxxxxxxxxxxxxx

Imagen 2.png

Puede ver el sp recién creado en el registro de la aplicación

Imagen 3.png


Luego puede autorizar al sp. Primero puede otorgar al sp un permiso de colaborador de grupo de recursos o permiso de suscripción

Luego, puede iniciar sesión en la CLI de Azure. Primero, especifique el entorno de inicio de sesión como China

az cloud set --name AzureChinaCloud

Imagen 1.png

el inicio de sesión

Abra la ventana de inicio de sesión del navegador, ingrese la contraseña para iniciar sesión

WeChat screenshot_20201228132414.png


Se ha preparado el entorno de nube, y luego se puede escribir código Terraform. Si simplemente crea una máquina virtual, el código terraform será muy simple. En cuanto a los parámetros que se deben especificar al momento de crear una máquina virtual, como el nombre de la máquina virtual, tamaño, etc. Todos podemos definirnos como variables, lo cual es muy similar a otros lenguajes de programación.

Terraform versión 0.13 o superior necesita definir el proveedor de la siguiente manera. El proveedor requerido primero debe definir la versión del proveedor si se usa. Puede ser una versión fija o se puede especificar un rango.

terraform { 
  required_providers { 
    azure = { 
      source = "hashicorp / azurerm" 
      version = "2.14.0" 
    } 
  } 
}

Lo siguiente es la definición de recursos.

Las definiciones en locales son generalmente constantes reutilizables, que no necesitan ser asignadas como variables durante la implementación, pero pueden usarse directamente

locales { 
  vm_name = "AzureVM" 
}


El comienzo a continuación es la definición de los recursos de Azure, incluidos los grupos de recursos, las redes virtuales, las tarjetas de red, etc.

recurso "azurerm_resource_group" "main" { 
  nombre = "$ {var.prefix} -resources" 
  location = var.location 
} 

recurso "azurerm_virtual_network" "main" { 
  nombre = "$ {var.prefix} -network" 
  address_space = [" 10.0.0.0/16 "] 
  ubicación = azurerm_resource_group.main.location 
  resource_group_name = azurerm_resource_group.main.name 


  subred { 

    name = "" Subnet1 
    address_prefix = "10.0.2.0/24" 
    security_group = azurerm_network_security_group.example.id 

  } 


    subred { 

    name =" Subred2 "
    address_prefix = "10.0.3.0/24"
    security_group = azurerm_network_security_group.example.id

  } 



} 

recurso "azurerm_network_interface" "main" { 
  name = "$ {var.prefix} -nic" 
  resource_group_name = azurerm_resource_group.main.name 
  location = azurerm_resource_group.main.location 

  ip_configuration { 
    name = "internal" 
    subnet_id = elemento (azurerm_network_virt .subnet. *. id, 1) 
    private_ip_address_allocation = "Dynamic" 
    public_ip_address_id = azurerm_public_ip.example.id 

  } 
} 

recurso "azurerm_virtual_machine" "principal" { { 
  nombre = "$ {var.prefix} -vm"
  resource_group_name = azurerm_resource_group.main.name 
  ubicación = azurerm_resource_group.main.location 
  vm_size = "" Standard_DS2_v2 
  network_interface_ids = [ 
    azurerm_network_interface.main.id 
  ] 

  storage_image_reference { 
    publisher = "MicrosoftWindowsServer" 
    oferta = "WindowsServer" 
    "2016-centro de datos" SKU = 
    version = " último " 
  } 

  storage_os_disk { 
    name =" myosdisk1 " 
    caching =" ReadWrite " 
    create_option =" FromImage "
    managed_disk_type = "Standard_LRS" 
  }
 
  storage_data_disk { 

    name = "DataDisk" 
    caché = "Ninguno"
    create_option = "vacío" 
    disk_size_gb = 500 
    lun = 0 
    managed_disk_type = "Premium_LRS" 

  } 




  os_profile { 

    computer_name = local.vm_name 
    admin_username = var.username 
    contraseña_admin = var.password 
  } 



  os_profile_windows_config { 
    
     enable_automatic_upgrades = false 
     provision_vm_agent = false 

  } 
}



Defina el código IAC, primero usamos terraform init para descargar el proveedor requerido, puede ver que se está descargando el proveedor Terraform azurerm

Imagen 5.png

Una vez completada la descarga, intente realizar un plan para ver los cambios que se producirán durante la implementación. Puede ver que hay muchos + en el frente, lo que significa que estos recursos se agregarán. Si se destruye, es posible que vea muchos signos. Además, De hecho, terraform realiza cambios de recursos principalmente basados ​​en el estado en tfstate. Como somos un estado vacío, cualquier recurso creado será juzgado como una nueva adición. Si es un estado existente, primero debemos mirar el estado. Qué hay ahí dentro

Imagen 6.png

A continuación, aplique directamente para crear, ingrese sí para confirmar

Imagen 7.png

    Puede ver que los recursos se están creando todo el tiempo, y esta interfaz de salida se siente mucho más amigable que ARM Template

WeChat screenshot_20201228134139.png


Una vez completada la implementación, inicie sesión en el portal, puede ver que se han creado los recursos

Imagen 9.png


Supongo que te gusta

Origin blog.51cto.com/mxyit/2575715
Recomendado
Clasificación