
Recientemente actualicé de Terraform 11 a 12 usando elactualización de terraforma 0.12comando y ahora recibo el siguiente error cuando ejecuto unvalidar terraformar:
$ ~/terraform/us-west-2/app/production/db/rds $ terraform validate
Error: Unsupported attribute
on main.tf line 111, in resource "aws_rds_cluster" "app_db_production":
111: master_password = data.aws_kms_secret.app_db_production.master_password
This object has no argument, nested block, or exported attribute named
"master_password".
$ ~/terraform/us-west-2/app/production/db/rds $
La configuración en cuestión:
data "aws_kms_secret" "app_db_production" {
secret {
name = "master_password"
payload = "2430db63c4f1479f122fb219d179afb1"
}
}
resource "aws_rds_cluster" "app_db_production" {
cluster_identifier = "app-db-production"
engine = "aurora-mysql"
database_name = "app"
port = 3306
master_username = "root"
master_password = data.aws_kms_secret.app_db_production.master_password
backup_retention_period = 7
preferred_backup_window = "02:00-03:00"
preferred_maintenance_window = "sat:03:00-sat:04:00"
storage_encrypted = true
apply_immediately = false
final_snapshot_identifier = "app-db-production-final-snapshot"
db_cluster_parameter_group_name = "app-db-production"
db_subnet_group_name = "app-db-production"
vpc_security_group_ids = [data.terraform_remote_state.app_production_db_sg.outputs.app_db_production]
lifecycle {
create_before_destroy = true
}
tags = {
Application = "db"
Environment = "production"
Platform = "app"
}
}
Esto funcionaba perfectamente en Terraform 11. ¿Alguien puede indicarme la dirección correcta?
Respuesta1
Esto se debe a un cambio en el proveedor de AWS y no en la CLI de Terraform.
Específicamente,la aws_kms_secret
fuente de datos está en desusoy disponible solo (con una advertencia de obsolescencia) en Terraform 0.11.
Para continuar, debe migrar a la aws_kms_secrets
fuente de datos más nueva. El enlace anterior es para la documentación completa sobre esa migración, pero la parte relevante para el propósito de esta pregunta es que las salidas para esta nueva fuente de datos están en un atributo de objeto llamado plaintext
, con la intención de que luego pueda usar ese mapa completo como un valor único si es necesario, además de extraer valores individuales como lo hacía antes.
master_password = data.aws_kms_secrets.app_db_production.plaintext["master_password"]