
Ich habe kürzlich ein Upgrade von Terraform 11 auf 12 durchgeführt mit demTerraform 0.12 UpgradeBefehl und jetzt erhalte ich den folgenden Fehler, wenn ich einenTerraform validieren:
$ ~/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 $
Die fragliche Konfiguration:
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"
}
}
Dies hat in Terraform 11 perfekt funktioniert. Kann mir bitte jemand den richtigen Weg weisen?
Antwort1
Dies wird durch eine Änderung im AWS-Anbieter und nicht in der Terraform-CLI verursacht.
Speziell,Die aws_kms_secret
Datenquelle ist veraltetund nur (mit einer Veraltungswarnung) in Terraform 0.11 verfügbar.
Um fortzufahren, müssen Sie zur neueren aws_kms_secrets
Datenquelle migrieren. Der obige Link führt zur vollständigen Dokumentation dieser Migration. Für diese Frage ist jedoch der relevante Teil, dass die Ausgaben für diese neue Datenquelle in einem Objektattribut mit dem Namen liegen plaintext
, mit der Absicht, dass Sie dann bei Bedarf die gesamte Karte als Einzelwert verwenden können, zusätzlich zum Extrahieren einzelner Werte wie zuvor.
master_password = data.aws_kms_secrets.app_db_production.plaintext["master_password"]