Configuración de Terraform en Azure Cloud Shell con Azure PowerShell
Terraform habilita la definición, vista previa e implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, se crea un plan de ejecución que permite obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.
En este artículo se describe cómo empezar a trabajar con Terraform en Azure mediante Cloud Shell y PowerShell.
En este artículo aprenderá a:
- Configurar Cloud Shell.
- Comprender los escenarios comunes de autenticación de Terraform y Azure.
- Autenticarse mediante una cuenta Microsoft desde Cloud Shell (con Bash o PowerShell).
- Autenticarse mediante una cuenta Microsoft desde Windows (con Bash o PowerShell).
- Crear una entidad de servicio con la CLI de Azure.
- Creación de una entidad de servicio mediante Azure PowerShell
- Especificar las credenciales de la entidad de servicio en las variables de entorno.
- Especificar las credenciales de la entidad de servicio en un bloque de proveedor de Terraform.
1. Configurar su entorno
- Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
2. Apertura de Cloud Shell
Si ya tiene abierta una sesión de Cloud Shell, puede ir directamente a la sección siguiente.
Inicie sesión en Azure Portal.
Si es necesario, inicie sesión en su suscripción de Azure y cambie el directorio de Azure.
Abra Cloud Shell.
Si no ha usado anteriormente Cloud Shell, configure el entorno y las opciones de almacenamiento.
Seleccione el entorno de línea de comandos.
3. Instalación de la versión más reciente de Terraform en Azure Cloud Shell
Cloud Shell automáticamente se actualiza a la versión más reciente de Terraform. Sin embargo, las actualizaciones vienen en un par de semanas de lanzamiento. En este artículo se muestra cómo descargar e instalar la versión actual de Terraform.
Determine la versión de Terraform que se usa en Cloud Shell.
terraform version
Si la versión de Terraform instalada en Cloud Shell no es la versión más reciente, verá un mensaje que indica que la versión de Terraform no está actualizada.
Si está a gusto trabajando con la versión indicada, vaya a la sección siguiente. Si no, continúe con estos pasos.
Vaya a la página de descargas de Terraform.
Desplácese hasta los vínculos de descarga de Linux.
Mueva el mouse sobre el vínculo de 64 bits. Este vínculo es para la versión amd de Linux de 64 bits más reciente, que es adecuada para Cloud Shell.
Copie la dirección URL.
Ejecute
curl
, y reemplace el marcador de posición por la dirección URL del paso anterior.curl -O <terraform_download_url>
Descomprima el archivo.
unzip <zip_file_downloaded_in_previous_step>
Si el directorio no existe, cree uno llamado
bin
.mkdir bin
Mueva el archivo
terraform
al directoriobin
.mv terraform bin/
Cierre y reinicie Cloud Shell.
Compruebe que la versión descargada de Terraform aparece en primer lugar en la ruta de acceso.
terraform version
4. Comprobación de la suscripción predeterminada de Azure
Al iniciar sesión en Azure Portal con una cuenta Microsoft, se usa la suscripción predeterminada de Azure de esa cuenta.
Terraform se autentica automáticamente mediante la información de la suscripción predeterminada de Azure.
Para comprobar la suscripción de Azure y la cuenta Microsoft actuales, ejecute az account show.
az account show
Los cambios que realice a través de Terraform se encuentran en la suscripción de Azure mostrada. Si eso es lo que quiere, omita el resto de este artículo.
5. Autenticación de Terraform en Azure
Escenarios de autenticación de Terraform y Azure
Terraform solo admite la autenticación en Azure a través de la CLI de Azure. No se admite la autenticación mediante Azure PowerShell. Por lo tanto, aunque puede usar el módulo de Azure PowerShell al realizar el trabajo de Terraform, primero debe autenticarse en Azure mediante la CLI de Azure.
En este artículo se explica cómo autenticar Terraform en Azure en los escenarios siguientes. Para más información sobre las opciones de autenticación de Terraform en Azure, consulte Autenticación mediante la CLI de Azure.
- Autenticación a través de una cuenta de Microsoft mediante Cloud Shell (con Bash o PowerShell)
- Autenticación a través de una cuenta microsoft mediante Windows (con Bash o PowerShell)
- Autenticación a través de una entidad de servicio:
- Si aún no tiene una entidad de servicio, cree una.
- Autentíquese en Azure mediante variables de entorno o hágalo mediante el bloque del proveedor de Terraform.
Autenticación en Azure mediante una cuenta Microsoft
Una cuenta Microsoft es un nombre de usuario (asociado a un correo electrónico y sus credenciales) que se usa para iniciar sesión en los servicios de Microsoft, como Azure. Se puede asociar a una o varias suscripciones de Azure, una de las cuales es la predeterminada.
En los siguientes pasos se explica cómo:
- Inicio de sesión en Azure de forma interactiva mediante una cuenta Microsoft
- Enumeración de las suscripciones de Azure asociadas a la cuenta (incluido el valor predeterminado)
- Establezca la suscripción actual.
Abra una línea de comandos que tenga acceso a la CLI de Azure.
Ejecute az login sin parámetros y siga las instrucciones para iniciar sesión en Azure.
az login
Puntos clave:
- Después de iniciar sesión correctamente,
az login
muestra una lista de las suscripciones de Azure asociadas a la cuenta microsoft que ha iniciado sesión, incluida la suscripción predeterminada.
- Después de iniciar sesión correctamente,
Para ver la suscripción actual de Azure, ejecute az account show.
az account show
Para ver todos los nombres de suscripción e identificadores de Azure de una cuenta Microsoft específica, ejecute az account list.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
Puntos clave:
- Reemplace el marcador de posición
<microsoft_account_email>
por la dirección de correo electrónico de la cuenta Microsoft cuyas suscripciones de Azure quiere mostrar. - Con una cuenta activa, como Hotmail o Outlook, es posible que tenga que especificar la dirección de correo electrónico completa. Por ejemplo, si la dirección de correo electrónico es
admin@hotmail.com
, es posible que tenga que reemplazar el marcador de posición porlive.com#admin@hotmail.com
.
- Reemplace el marcador de posición
Para usar una suscripción de Azure específica, ejecute az account set.
az account set --subscription "<subscription_id_or_subscription_name>"
Puntos clave:
- Reemplace el marcador de posición
<subscription_id_or_subscription_name>
por el identificador o el nombre de la suscripción que quiere usar. - Una llamada a
az account set
no muestra los resultados del cambio a la suscripción de Azure especificada. Sin embargo, puede usaraz account show
para confirmar que la suscripción actual de Azure ha cambiado. - Si ejecuta el comando
az account list
del paso anterior, verá que la suscripción predeterminada de Azure ha cambiado a la suscripción que especificó conaz account set
.
- Reemplace el marcador de posición
Creación de una entidad de servicio
las herramientas automatizadas que usan los servicios de Azure, como Terraform, deberán tener siempre permisos restringidos. En lugar de que las aplicaciones inicien sesión como un usuario con privilegios totales, Azure ofrece las entidades de servicio.
El patrón más común es iniciar sesión interactivamente en Azure, crear una entidad de servicio, probar la entidad de servicio y, a continuación, usar esa entidad de servicio para la autenticación futura (ya sea de forma interactiva o desde los scripts).
Para crear una entidad de servicio, inicie sesión en Azure. Después de autenticarse en Azure mediante una cuenta Microsoft, vuelva aquí.
Si va a crear una entidad de servicio desde Git Bash, establezca la variable de entorno
MSYS_NO_PATHCONV
. (Este paso no es necesario si usa Cloud Shell).export MSYS_NO_PATHCONV=1
Puntos clave:
- Puede establecer la variable de entorno
MSYS_NO_PATHCONV
globalmente (para todas las sesiones de terminal) o localmente (solo para la sesión actual). Como la creación de una entidad de servicio no es algo que se hace a menudo, el ejemplo establece el valor de la sesión actual. Para establecer esta variable de entorno globalmente, agregue la configuración al archivo~/.bashrc
.
- Puede establecer la variable de entorno
Para crear una entidad de servicio, ejecute az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Puntos clave:
- Puede reemplazar
<service-principal-name>
por un nombre personalizado para su entorno u omitir el parámetro por completo. Si omite el parámetro, el nombre de la entidad de seguridad de servicio se genera en función de la fecha y hora actuales. - Una vez finalizado correctamente,
az ad sp create-for-rbac
muestra varios valores. En el paso siguiente se usan los valoresappId
,password
ytenant
. - La contraseña no se puede recuperar si se pierde. Por lo tanto, debe almacenarla en un lugar seguro. Si olvida la contraseña, puede restablecer las credenciales de la entidad de servicio.
- En este artículo, se usa una entidad de servicio con el rol Colaborador. Para obtener más información sobre los roles de Role-Based Access Control (RBAC), consulte RBAC: roles integrados.
- La salida de la creación de la entidad de servicio incluye credenciales confidenciales. Asegúrese de no incluirlas en el código ni en el control de código fuente.
- Para más información sobre las opciones al crear una entidad de servicio con la CLI de Azure, consulte el artículo Creación de una entidad de servicio de Azure con la CLI de Azure.
- Puede reemplazar
Especificar las credenciales de la entidad de servicio en las variables de entorno.
Después de crear una entidad de servicio, puede especificar sus credenciales en Terraform mediante variables de entorno.
Modifique el archivo
~/.bashrc
agregando las siguientes variables de entorno.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
Para ejecutar el script
~/.bashrc
, ejecutesource ~/.bashrc
(o su equivalente abreviado,. ~/.bashrc
). También puede salir y volver a abrir Cloud Shell para que el script se ejecute automáticamente.. ~/.bashrc
Una vez establecidas las variables de entorno, puede comprobar sus valores de la siguiente manera:
printenv | grep ^ARM*
Puntos clave:
- Al igual que con cualquier variable de entorno, para acceder a un valor de suscripción de Azure desde un script de Terraform, use la sintaxis siguiente:
${env.<environment_variable>}
. Por ejemplo, para acceder al valorARM_SUBSCRIPTION_ID
, especifique${env.ARM_SUBSCRIPTION_ID}
. - Al crear y aplicar planes de ejecución de Terraform se realizan cambios en la suscripción de Azure asociada a la entidad de servicio. A veces, este hecho puede resultar confuso si ha iniciado sesión en una suscripción de Azure y las variables de entorno apuntan a una segunda suscripción de Azure. Echemos un vistazo al ejemplo siguiente para explicarlo. Supongamos que tiene dos suscripciones de Azure: SubA y SubB. Si la suscripción actual de Azure es SubA (determinada a través de
az account show
) mientras que las variables de entorno apuntan a SubB, los cambios realizados por Terraform se encuentran en SubB. Por lo tanto, tendría que iniciar sesión en su suscripción SubB para ejecutar los comandos de la CLI de Azure o de Azure PowerShell y ver los cambios.
Especificar las credenciales de la entidad de servicio en un bloque de proveedor de Terraform.
El bloque de proveedor de Azure define la sintaxis que permite especificar la información de autenticación de la suscripción de Azure.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here
Precaución
La posibilidad de especificar las credenciales de suscripción de Azure en un archivo de configuración de Terraform puede resultar práctica, especialmente durante las pruebas. Sin embargo, no es aconsejable almacenar las credenciales en un archivo de texto no cifrado que los usuarios que no son de confianza pueden ver.
Solución de problemas de Terraform en Azure
Solución de problemas comunes al usar Terraform en Azure