Actualización Terraform 11 a 12. ERROR: atributo no admitido

Actualización Terraform 11 a 12. ERROR: atributo no admitido

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_secretfuente de datos está en desusoy disponible solo (con una advertencia de obsolescencia) en Terraform 0.11.

Para continuar, debe migrar a la aws_kms_secretsfuente 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"]

información relacionada