
Недавно я обновился с Terraform 11 до 12 с помощьюterraform 0.12обновлениекоманду и теперь я получаю следующую ошибку при запускетерраформировать проверить:
$ ~/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 $
Рассматриваемая конфигурация:
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"
}
}
Это прекрасно работало в Terraform 11. Может ли кто-нибудь указать мне правильное направление?
решение1
Это вызвано изменением поставщика AWS, а не Terraform CLI.
Конкретно,источник данных aws_kms_secret
устарели доступен только (с предупреждением об устаревании) в Terraform 0.11.
Чтобы продолжить, вам необходимо перейти на новый aws_kms_secrets
источник данных. Ссылка выше ведет на полную документацию по этой миграции, но для этого вопроса важно то, что выходные данные для этого нового источника данных находятся в атрибуте объекта с именем plaintext
, с намерением, что вы затем сможете использовать всю эту карту как единое значение, если вам это нужно, в дополнение к извлечению отдельных значений, как вы делали раньше.
master_password = data.aws_kms_secrets.app_db_production.plaintext["master_password"]