Ir al contenido
  1. Posts/

Migrando de Terraform a OpenTofu

·603 palabras·3 mins· loading · loading ·
Linux Infraestructura DevOps linux infraestructura devops ci iac
Autor
Enmanuel Moreira
Ingeniero DevOps de día y aprendiz de Barman en mis tiempos libres, con experiencia en Kubernetes, Cloud, y DevOps. También disfruta de hacer stream de juegos, hablar de CI/CD, desplegar en producción un viernes con Terraform y automatizar tareas aburridas con Ansible.

La primera versión de OpenTofu (el fork de Terrafom) ya se encuentra entre nosotros. Veremos como instalar OpenTofu y migrar nuestra infraestructura existente de manera segura.

PROMO DigitalOcean
#

Antes de comenzar, quería contarles que hay una promoción en DigitalOcean donde te dan un crédito de USD 200.00 durante 60 días para que puedas probar los servicios que este Proveedor Cloud ofrece. Lo único que tienes que hacer es suscribirte a DigitalOcean con el siguiente botón:

DigitalOcean Referral Badge

O a través del siguiente enlace: https://bit.ly/digitalocean-itsm

Instalando OpenTofu
#

Debian/Ubuntu
#

Actualizamos el sistema e instalamos las dependencias necesarias:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

Importamos la llave GPG del repositorio de OpenTofu:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://get.opentofu.org/opentofu.gpg | sudo tee /etc/apt/keyrings/opentofu.gpg >/dev/null
curl -fsSL https://packages.opentofu.org/opentofu/tofu/gpgkey | sudo gpg --no-tty --batch --dearmor -o /etc/apt/keyrings/opentofu-repo.gpg >/dev/null
sudo chmod a+r /etc/apt/keyrings/opentofu.gpg

Creamos el archivo con los datos del repositorio:

echo \
  "deb [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main
deb-src [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main" | \
  sudo tee /etc/apt/sources.list.d/opentofu.list > /dev/null

Finalmente instalamos OpenTofu:

sudo apt-get update
sudo apt-get install -y tofu

Fedora/RHEL
#

Creamos el archivo con los datos del repositorio en la ruta /etc/yum.repos.d/opentofu.repo:

cat >/etc/yum.repos.d/opentofu.repo <<EOF
[opentofu]
name=opentofu
baseurl=https://packages.opentofu.org/opentofu/tofu/rpm_any/rpm_any/\$basearch
repo_gpgcheck=0
gpgcheck=1
enabled=1
gpgkey=https://get.opentofu.org/opentofu.gpg
       https://packages.opentofu.org/opentofu/tofu/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[opentofu-source]
name=opentofu-source
baseurl=https://packages.opentofu.org/opentofu/tofu/rpm_any/rpm_any/SRPMS
repo_gpgcheck=0
gpgcheck=1
enabled=1
gpgkey=https://get.opentofu.org/opentofu.gpg
       https://packages.opentofu.org/opentofu/tofu/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOF

Instalamos OpenTofu:

sudo yum install -y tofu

OpenSUSE
#

Creamos el archivo con los datos del repositorio en la ruta /etc/zypp/repos.d/opentofu.repo:

cat >/etc/zypp/repos.d/opentofu.repo <<EOF
[opentofu]
name=opentofu
baseurl=https://packages.opentofu.org/opentofu/tofu/rpm_any/rpm_any/\$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://get.opentofu.org/opentofu.gpg
       https://packages.opentofu.org/opentofu/tofu/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[opentofu-source]
name=opentofu-source
baseurl=https://packages.opentofu.org/opentofu/tofu/rpm_any/rpm_any/SRPMS
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://get.opentofu.org/opentofu.gpg
       https://packages.opentofu.org/opentofu/tofu/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOF

Importamos las llaves GPG del repositorio de Opentofu:

zypper --gpg-auto-import-keys refresh opentofu
zypper --gpg-auto-import-keys refresh opentofu-source

Instalamos OpenTofu:

zypper install -y tofu

Migrando a OpenTofu
#

Disclaimer
#

No es necesario mencionarte que hagas respaldo del estado actual de tu infra de Terraform (el archivo terraform.tfstate), verdad? VERDAD?

Si nuestro estado se encontrase en un bucket S3 o similar, debemos respaldar toda la ruta completa donde se encuentra el archivo terraform.tfstate.

A pesar que la versión actual de OpenTofu es la misma que la de Terraform (1.6), un cambio puede afectar la infraestructura. Por lo que se recomienda, antes de migrar, tener la infra al dia con los comandos:

terraform plan

Y debería mostrarnos la siguiente salida:

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your
configuration and found no differences, so no changes are needed.

Inicializando OpenTofu
#

Una vez hayamos respaldado el estado actual de nuestra infra y nos aseguremos que esta se encuentra al día y sin errores, procedemos a inicializar OpenTofu el cual descargará todos los providers y módulos necesarios:

tofu init

Inspeccionando el plan
#

Ejecutamos:

tofu plan

Comprobando que efectivamente nuestra infra se encuentra sin detalles y cambios relevantes:

No changes. Your infrastructure matches the configuration.

OpenTofu has compared your real infrastructure against your
configuration and found no differences, so no changes are needed.

Probando Cambios
#

Es hora de probar un pequeño cambio en nuestra infra. Por ejemplo, cambiar de nombre algun recurso o agregar un argumento.

Ejecutamos entonces:

tofu apply

Reversando Cambios a Terraform
#

En caso de tener problemas al migrar a OpenTofu, podemos volver a Terraform con los siguientes pasos:

  1. Creamos otro respaldo de nuestro estado.
  2. Ejecutamos terraform init.
  3. Ejecutamos terraform plan y validamos que no hayan cambios en la infra.
  4. Probamos con algún pequeño cambio y luego terraform apply.
  5. Si encontramos un bug, seria recomendable reportarlo en el GitHub del Proyecto OpenTofu.

Espero que hayas migrado tu infra a OpenTofu y ¡nos vemos en la próxima!