En este paso, aprenderá a renombrar un recurso en el archivo de estado utilizando terraform state mv. Esta es una tarea común al refactorizar su código de Terraform. Si renombra un bloque de recurso en su archivo .tf, Terraform pensará que desea destruir el recurso antiguo y crear uno nuevo. El comando state mv le permite actualizar el archivo de estado para que coincida con los cambios de su código, evitando destrucciones y creaciones innecesarias.
Primero, renombraremos el recurso en nuestro archivo de configuración. Abra main.tf con el editor nano:
nano main.tf
Cambie el nombre del recurso de example a example_renamed. El archivo debería verse así:
resource "local_file" "example_renamed" {
content = "This is an example file managed by Terraform."
filename = "${path.module}/example.txt"
}
Presione Ctrl+X, luego Y, y Enter para guardar y salir.
Ahora, ejecute terraform plan para ver lo que Terraform tiene la intención de hacer:
terraform plan
El plan mostrará que Terraform quiere destruir local_file.example y crear local_file.example_renamed, que no es lo que queremos.
local_file.example: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
- destroy
Terraform will perform the following actions:
## local_file.example will be destroyed
## (because local_file.example is not in configuration)
- resource "local_file" "example" {
- content = "This is an example file managed by Terraform." -> null
- content_base64sha256 = "F5EYZhFNzSXdE4CUftwQoDVqvdiufZpVyiLMqyZVOcQ=" -> null
- content_base64sha512 = "m1hvaxMuc/EhaKintyI54NSTTJ5yXpqHPCBNoHubF0rvF3JAj36lMj20aPcv21+3/OK+SqkiTlnT/LdvLCwqDA==" -> null
- content_md5 = "a43bdd236c2f0f4d87452ba2ef0867e4" -> null
- content_sha1 = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
- content_sha256 = "17911866114dcd25dd1380947edc10a0356abdd8ae7d9a55ca22ccab265539c4" -> null
- content_sha512 = "9b586f6b132e73f12168a8a7b72239e0d4934c9e725e9a873c204da07b9b174aef1772408f7ea5323db468f72fdb5fb7fce2be4aa9224e59d3fcb76f2c2c2a0c" -> null
- directory_permission = "0777" -> null
- file_permission = "0777" -> null
- filename = "./example.txt" -> null
- id = "ec3adcab998872def2df6200fb03992ac6f237a4" -> null
}
## local_file.example_renamed will be created
+ resource "local_file" "example_renamed" {
+ content = "This is an example file managed by Terraform."
+ content_base64sha256 = (known after apply)
+ content_base64sha512 = (known after apply)
+ content_md5 = (known after apply)
+ content_sha1 = (known after apply)
+ content_sha256 = (known after apply)
+ content_sha512 = (known after apply)
+ directory_permission = "0777"
+ file_permission = "0777"
+ filename = "./example.txt"
+ id = (known after apply)
}
Plan: 1 to add, 0 to change, 1 to destroy.
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
Para solucionar esto, le diremos a Terraform que simplemente hemos movido el recurso. Ejecute el comando terraform state mv con la dirección antigua y la dirección nueva:
terraform state mv local_file.example local_file.example_renamed
Verá un mensaje de confirmación:
Move "local_file.example" to "local_file.example_renamed"
Successfully moved 1 object(s).
Ahora, ejecute terraform plan de nuevo:
terraform plan
Esta vez, Terraform informa que no se necesitan cambios porque el estado ahora coincide con la configuración.
local_file.example_renamed: Refreshing state... [id=ec3adcab998872def2df6200fb03992ac6f237a4]
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.