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:
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:
- Creamos otro respaldo de nuestro estado.
- Ejecutamos
terraform init
. - Ejecutamos
terraform plan
y validamos que no hayan cambios en la infra. - Probamos con algún pequeño cambio y luego
terraform apply
. - 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!