terraform - 尝试传递 aws_secretsmanager_secret_version 值时出错
问题描述
在 RDS AWS 创建的密码部分下,我试图传递aws_secretsmanager_secret_version
价值。我得到以下错误。
resource "aws_db_instance" "airflow" {
allocated_storage = "${var.rds_allocated_storage}"
storage_type = "${var.rds_storage_type}"
storage_encrypted = "true"
engine = "mysql"
engine_version = "${var.rds_engine_version}"
instance_class = "${var.rds_instance_class}"
name = "airflow"
identifier = "airflow"
username = "${var.rds_username}"
password = "${jsondecode(aws_secretsmanager_secret_version.secret.secret_string)["rds_password"]}"
parameter_group_name = "-airflow-mysql"
vpc_security_group_ids = ["${aws_security_group_airflow_sg.id}"]
db_subnet_group_name = "${aws_db_subnet_group.airflow_rds.id}"
kms_key_id = "${data.aws_kms_key.rds.arn}"
license_model = "general-public-license"
depends_on = [
aws_db_parameter_group.airflow_mysql
]
tags = merge(
var.common_tags,
map("Classification", "private"),
map("Name", "-airflow-rds")
)
}
秘密管理器.tf
resource "aws_secretsmanager_secret" "secret" {
description = "airflow"
kms_key_id = "${data.aws_kms_key.sm.arn}"
name = "airflow"
}
resource "random_string" "rds_password" {
length = 16
special = true
override_special = "/@\" "
}
resource "aws_secretsmanager_secret_version" "secret" {
secret_id = "${aws_secretsmanager_secret.secret.id}"
secret_string = <<EOF
{
"rds_password": "${random_string.rds_password.result}"
}
EOF
}
以下是错误日志:-
错误:函数调用错误
在 ../../modules/airflow/outputs.tf 第 27 行,在输出 "rds_password": 27: value = jsondecode(aws_secretsmanager_secret_version.secret.secret_string)["rds_password"] |------ -------- | aws_secretsmanager_secret_version.secret.secret_string 是 "{\n \"rds_password\": \"9Y\"@xu3jy@sNGXt/\"\n }\n"
调用函数“jsondecode”失败:对象键:值对后的无效字符“@”。
错误:函数调用错误
在 ../../modules/airflow/rds.tf 第 12 行,在资源 "aws_db_instance" "airflow": 12: password = "${jsondecode(aws_secretsmanager_secret_version.secret.secret_string)["rds_password"]}" |- --------------- | aws_secretsmanager_secret_version.secret.secret_string 是 "{\n \"rds_password\": \"9Y\"@xu3jy@sNGXt/\"\n }\n"
调用函数“jsondecode”失败:对象键:值对后的无效字符“@”。
解决方案
我认为您没有正确索引地图。问题在secret_string)["rds_password"]
。
代替
password = "${jsondecode(aws_secretsmanager_secret_version.secret.secret_string)["rds_password"]}"
和
password = "${jsondecode(aws_secretsmanager_secret_version.secret.secret_string["rds_password"])}"
推荐阅读
- php - WooCommerce 中特定产品的基于地理位置的自定义重定向
- azure - Azure 服务总线高级版 - 异地恢复 - 丢弃的消息
- vue.js - 捆绑后,vuetify 需要 500kb 捆绑大小
- python - 是否使用正则表达式,从 HTML 中获取 json 值
- python - 如何根据条件从数据框列名中填充列值?
- javascript - CROPPER JS 获取裁剪器画布不适用于较大的文件
- java - 什么时候在 Spring 中使用删除请求?
- azure - 架构推荐 - Azure Webjob
- reactjs - 反应和公认的标准
- layout - 向下滚动时,可滚动的列表视图弹回顶部