Atualização do Terraform 11 para 12. ERRO: atributo não suportado

Atualização do Terraform 11 para 12. ERRO: atributo não suportado

Recentemente atualizei do Terraform 11 para 12 usando oatualização do terraform 0.12comando e agora estou recebendo o seguinte erro quando executo umvalidação de terraform:

$ ~/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 $

A configuração em questão:

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"
  }
}

Isso estava funcionando perfeitamente no Terraform 11. Alguém pode me indicar a direção certa?

Responder1

Isso é causado por uma mudança no provedor AWS e não na CLI do Terraform.

Especificamente,a aws_kms_secretfonte de dados está obsoletae disponível apenas (com um aviso de descontinuação) no Terraform 0.11.

Para continuar, você deve migrar para a aws_kms_secretsfonte de dados mais recente. O link acima é para a documentação completa sobre essa migração, mas a parte relevante para o propósito desta questão é que as saídas para esta nova fonte de dados estão em um atributo de objeto chamado plaintext, com a intenção de que você possa usar todo esse mapa como um único valor se precisar, além de extrair valores individuais como fazia antes.

master_password = data.aws_kms_secrets.app_db_production.plaintext["master_password"]

informação relacionada