terraform - 动态生成和引用 Terraform 块
问题描述
我正在创建一个 Terraform 模块,我想将其用作某种模板(使用 Terragrunt)。有一些配置部分在部署中将保持不变,但其他一些配置部分将特定于每个部署。
在这种情况下,我想设置一些秘密值,这些值将通过秘密管理器注入,然后在 Helm 图表中引用。
所以要转换这样的东西:
resource random_password auth_password {
length = 16
special = true
}
resource google_secret_manager_secret auth_password {
provider = google-beta
secret_id = "${var.prefix}-auth-password"
replication {
automatic = true
}
}
resource google_secret_manager_secret_version auth_password {
provider = google-beta
secret = google_secret_manager_secret.auth_password.name
secret_data = base64encode(random_password.auth_password.result)
}
helm_release deploy {
...
set {
name = "auth_password"
value = base64decode(google_secret_manager_secret_version.auth_password.secret_data)
}
}
变成这样:
for secret in e.secrets {
resource random_password "auth_password_${secret.name}" {
length = 16
special = true
}
resource google_secret_manager_secret "auth_password_${secret.name}" {
provider = google-beta
secret_id = "${var.prefix}-auth-password-${secret.name}"
}
resource google_secret_manager_secret_version "auth_password_${secret.name}" {
provider = google-beta
secret = google_secret_manager_secret."auth_password_${secret.name}".name
secret_data = base64encode(random_password."auth_password_${secret.name}".result)
}
}
helm deploy {
...
for secret in e.secrets {
set {
name = "auth_password_${secret.name}"
value = base64decode(google_secret_manager_secret_version."auth_password_${secret.name}".secret_data)
}
}
}
这里的关键是这些被注入的值是敏感的,因此它们不能作为纯文本放在源代码中。此外,如果只有当前工具包的解决方案可用,我不会考虑在此阶段实施 Sops。
我在块上尝试了多种方法,例如动态块、指令和for_each,但到目前为止它们还没有起作用,因为它们在引用其他动态创建的块方面存在不足。
谢谢。
当前版本:
- 地形:0.12.29
- Terragrunt:0.23.40
解决方案
推荐阅读
- c# - Entity Framework Core:没有外键的单向导航属性
- javascript - 在父级内部使用 translateX 不断移动对象,我的计算有什么问题?
- flutter - 当我使用 ScrollController 侦听器时颤动锁定一秒 ui
- ruby-on-rails - 如何在 rails_admin 的嵌套字段中自定义输入字段的操作?
- azure - 将自定义数据传递给 azure vmss 的操作系统选项 - Terraform
- python - 有没有办法在 Python 中管理大量导入语句?
- python-3.x - Python按浮点值排序字典列表
- c++ - 如何设置 .vcxproj 让 MSBuild 编译一个 dll
- php - PHP 致命错误:无法声明类 CreateUsersTable,因为该名称已在使用中
- seaborn - 在使用 Seaborn Distplot 时了解 bin 和相关分布