Como usuario actual de la CLI de Terraform, usted es responsable de mantener un archivo de estado como fuente de verdad para su infraestructura de nube. Puede migrar su archivo de estado local a Terraform Cloud sin interrumpir o recrear su infraestructura existente.
Advertencia: Cuando cargue un archivo de estado en Terraform Cloud utilizando los pasos de este tutorial, utilice siempre la misma versión de la CLI de Terraform que utilizó para crear los recursos. El uso de una versión más reciente de Terraform puede actualizar el archivo de estado y causar daños en el archivo de estado.
«Requisitos previos
Este tutorial asume que tiene lo siguiente:
- La CLI de Terraform instaló localmente
- Una cuenta de Terraform Cloud
Nota: Debido a que el backend remote
no era compatible con la versión anterior de Terraform, debe usar 0.11.13 o superior para migrar su estado a Terraform Cloud. Los fragmentos de este tutorial usan sintaxis 0.12.
Si no tiene Terraform instalado localmente, puede completar este tutorial en un laboratorio interactivo desde su navegador web. Lanzamiento aquí.
«Crear estado
Comience clonando este repositorio de GitHub.
$ git clone https://github.com/hashicorp/learn-state-migration
Copia
a continuación, cambie al directorio.
$ cd learn-state-migration
Copie
Revise el archivo main.tf
en el directorio de trabajo para obtener una visión general de los recursos que está a punto de crear. Esta configuración utiliza el recurso random_pet
para generar y generar un nombre de mascota aleatorio con un número determinado de palabras. La longitud del nombre viene determinada por el valor de la variable name_length
, cuyo valor predeterminado es 3.
En una configuración del mundo real, es posible que tenga variables adicionales, como credenciales de plataforma en la nube definidas en un archivo .tfvars
. Explicaremos cómo establecer estos valores en el espacio de trabajo de Terraform Cloud más adelante en este tutorial, después de migrar el archivo de estado.
## Terraform configurationterraform { required_providers { random = { source = "hashicorp/random" version = "3.0.1" } } required_version = "~> 0.14"}variable "name_length" { description = "The number of words in the pet name" default = "3"}resource "random_pet" "pet_name" { length = var.name_length separator = "-"}output "pet_name" { value = random_pet.pet_name.id}
Copia
Inicializar el directorio.
$ terraform init
Copie
Después de inicializar Terraform, aplique la configuración y apruebe la ejecución escribiendo » sí » en el mensaje.
$ terraform apply
Copiar
Terraform generará un nombre de mascota generado aleatoriamente de tres palabras.
» Configurar el backend remoto
Ahora que tiene un archivo de estado local, necesita crear un bloque de código de backend en su configuración. Los motores le dicen a Terraform dónde cargar y guardar su archivo de estado.
Terraform utiliza el motor local de forma predeterminada si no define explícitamente un bloque de código de motor en su configuración. El motor local guarda su estado como un archivo terraform.tfstate
en el directorio donde ejecuta terraform apply
. Para migrar archivos de estado a Terraform Cloud, defina un backend remote
en su configuración agregando un nuevo bloque de código al comienzo de su archivo main.tf
.
terraform { required_providers { random = { source = "hashicorp/random" version = "3.0.1" } } required_version = "~> 0.14" backend "remote" { hostname = "app.terraform.io" organization = "<YOUR-ORG-NAME>" workspaces { name = "state-migration" } }}
Copie
Reemplace los valores de los atributos organización y espacios de trabajo por el nombre de su organización Terraform Cloud y el nombre del espacio de trabajo deseado. Si bien la organización definida en la estrofa de backend ya debe existir, el espacio de trabajo no tiene que existir; Terraform Cloud lo creará si es necesario. Si opta por usar un espacio de trabajo que ya existe, el espacio de trabajo no debe tener ningún estado existente.
Nota: Si está familiarizado con la ejecución de Terraform mediante la CLI, es posible que haya utilizado espacios de trabajo Terraform. Los espacios de trabajo Terraform Cloud se comportan de manera diferente a los espacios de trabajo CLI de Terraform. Los espacios de trabajo CLI de Terraform permiten que existan varios archivos de estado dentro de un solo directorio, lo que le permite usar una configuración para varios entornos. Los espacios de trabajo en la nube Terraform contienen todo lo necesario para administrar un conjunto determinado de infraestructura y funcionan como directorios de trabajo separados.
«Autenticarse con Terraform Cloud
Ahora que ha definido su backend, debe autenticarse con Terraform Cloud para proceder con la inicialización. Para autenticarse con Terraform Cloud, ejecute el subcomando terraform login
y siga las instrucciones para iniciar sesión.
Nota: Si está utilizando una versión de Terraform anterior a 0.12.21, el comando terraform login
no está disponible. En su lugar, configure un archivo de configuración de CLI para autenticarse.
$ terraform loginTerraform will request an API token for app.terraform.io using your browser.If login is successful, Terraform will store the token in plain text inthe following file for use by subsequent commands: /Users/username/.terraform.d/credentials.tfrc.jsonDo you want to proceed? Only 'yes' will be accepted to confirm. Enter a value:
Copiar
Responder al mensaje de confirmación con un yes
.
Para obtener instrucciones más detalladas sobre cómo iniciar sesión, consulte el tutorial de inicio de sesión.
» Migrar el archivo de estado
Una vez que haya autenticado el backend remote
, estará listo para migrar su archivo de estado local a Terraform Cloud. Para comenzar la migración, reinicializar. Esto hace que Terraform reconozca su configuración de backend modificada.
$ terraform initInitializing the backend...Do you want to copy existing state to the new backend? Pre-existing state was found while migrating the previous "local" backend to the newly configured "remote" backend. No existing state was found in the newly configured "remote" backend. Do you want to copy this state to the new "remote" backend? Enter "yes" to copy and "no" to start with an empty state. Enter a value:
Copiar
Durante la reinicialización, Terraform presenta un mensaje que indica que copiará el archivo de estado al nuevo motor. Introduzca yes
y Terraform migrará el estado de su máquina local a Terraform Cloud.
«Configure el espacio de trabajo de Terraform Cloud
Después de migrar su estado a Terraform Cloud, inicie sesión en la interfaz de usuario web de Terraform Cloud, busque el nombre de su espacio de trabajo tal como se define en la configuración del backend y haga clic en él. Vaya a la pestaña» Estados » del espacio de trabajo y vea su primera acción dentro del espacio de trabajo.
Recuerde que su configuración tiene una variable que debe agregar al espacio de trabajo nuevo. Haga clic en la pestaña» Variables «en el espacio de trabajo y, a continuación, en»Agregar variable».Introduzca el nombre de la variable, name_length
, como clave. A continuación, introduzca un valor nuevo, 5
, y guarde la variable.
Para configuraciones del mundo real, agregue credenciales de plataforma en la nube y cualquier otra variable de configuración al espacio de trabajo también.
» Iniciar una ejecución en el nuevo espacio de trabajo
Después de verificar que el estado se ha migrado al espacio de trabajo de Terraform Cloud, elimine el archivo de estado local.
$ rm terraform.tfstate
Copia
Aplicar una nueva ejecución.
$ terraform apply
Copiar
Terraform transmitirá los registros de Terraform Cloud y proporcionará un enlace a la ejecución en la interfaz de usuario de Terraform Cloud. Se establece un nuevo valor para la variable name_length
, por lo que el recurso se reemplazará por uno que coincida con los nuevos parámetros.
«Pasos siguientes
Destruya los recursos que creó para este tutorial haciendo clic primero en la opción» Configuración «en el espacio de trabajo de Terraform Cloud, seleccionando» Destrucción y destrucción», asegurándose de que la casilla de verificación» Permitir planes de destrucción «esté marcada y, a continuación, haciendo clic en»Plan de destrucción en cola».
Después de destruir los recursos, vuelva a la página «Destrucción y destrucción» y haga clic en «Eliminar de Terraform Cloud» para eliminar el espacio de trabajo.
En este tutorial, migró un archivo de estado de su máquina local a un espacio de trabajo en la nube de Terraform. Para obtener información sobre cómo migrar los archivos de estado de varios espacios de trabajo locales o restringir el acceso al espacio de trabajo a un equipo en particular, consulte la siguiente documentación.
- Migrar el estado desde varios Espacios de trabajo locales
- Administrar el acceso al espacio de trabajo
Si tiene una gran cantidad de archivos de estado que desea migrar a Terraform Cloud, considere usar la API de Terraform Cloud para hacerlo. Para obtener información sobre la carga de versiones de estado mediante la API, consulte la documentación de la API de versión de estado.