【发布时间】:2021-02-16 16:07:38
【问题描述】:
我想使用来自 AWS Secrets Manager 的密钥将 RDS 数据库部署到 AWS。我有:
├─ environments
│ └─ myenv
│ ├── main.tf
│ ├── locals.tf
│ └── variables.tf
└─ modules
├─ db
│ ├── main.tf
│ └── variables.tf
└─ secrets
└── main.tf
在myenv/main.tf 中,我定义了一个模块mydb,其中modules/db/main.tf 为source,其中定义了资源数据库。保存密码,一切正常,我在myenv 中指定块中的值和“涓滴”值。
但是对于凭证,我当然不想在myenv 中硬编码它们。
而是在modules/secrets 我定义
data "aws_secretsmanager_secret_version" "my_credentials" {
# Fill in the name you gave to your secret
secret_id = "my-secret-id"
}
还有另一个方块:
locals {
decoded_secrets = jsondecode(data.aws_secretsmanager_secret_version.my_credentials.secret_string)
}
我解码了这些秘密,现在我想引用它们,例如local.decoded_secrets.username 在myenv/main。这是我对教程的解释。但它不起作用:如果我将locals 块放入myenv,它不能引用data,当我把它放入modules/secrets 时,myenv 不能引用locals。
如何在我的myenv/main 中组合这两个模块的值?
【问题讨论】:
-
是否有理由认为密钥需要位于单独的模块中,而不是
db模块的一部分?这将大大简化它。 -
@ydaetskcoR 实际上有几个 db 实例,每个都有自己的秘密,所以我想我最好将关注点分离到它们自己的模块中,并从
myenv协调。但我想我可以合并它们。 -
您的
db模块仍然创建一个数据库,对吗?而且您不会在这些数据库之间共享秘密吗?在这种情况下,将此处的secrets模块折叠到db模块中似乎更干净。 -
@ydaetskcoR 我的数据库模块定义了一个单一的数据库资源并且没有秘密共享
标签: amazon-web-services terraform terraform-provider-aws terraform-aws-modules