And*_*ral 7 mongodb continuous-deployment continuous-delivery terraform mongodb-atlas
当我尝试使用 Terraform 和 mongodb atlas 提供程序输出 mongodb uri 时,我无法获取包含用户名和密码的完整 uri。例如,当我做类似的事情时:
terraform {
required_version = "~> 0.14.7"
required_providers {
mongodbatlas = {
source = "mongodb/mongodbatlas"
version = "0.8.2"
}
}
}
provider "mongodbatlas" {
public_key = var.mongodbatlas_public_key
private_key = var.mongodbatlas_private_key
}
data "mongodbatlas_cluster" "db" {
project_id = var.mongodbatlas_project_id
name = format("some-db-name-%s", var.env)
}
output "db_url" {
value = data.mongodbatlas_cluster.db.connection_strings[0].address_srv
}
Run Code Online (Sandbox Code Playgroud)
我总是得到以下形式的 uri:mongodb+srv://some-db-name-staging.xjcol.mongodb.net
将其作为环境变量添加到我的 Web 应用程序中以连接到数据库不起作用,因为它需要使用用户名和密码进行身份验证。手动将用户名和密码添加到该字符串中mongodb+srv://[username]:[password]@some-db-name-staging.xjcol.mongodb.net,应用程序可以正常连接到数据库。
小智 2
虽然我明白你想要实现的目标,但我怀疑你在这里混合了东西。让我解释:
但是,集群创建独立于数据库和数据库用户创建,这意味着您从 Terraform 获得的只是 Mongo 的通用连接字符串,甚至 Mongo 都不知道您想要连接到哪个用户/数据库。
我建议您编写自己的连接字符串,并使用配置后脚本将其传递到您的应用程序,可以使用集群和数据库用户的 Terraform 输出,或者如果您已经预先了解信息,则可以自行编写。
如果您使用 AWS,MongoDB Atlas 支持使用 IAM 用户和 IAM 角色的连接字符串。与处理密码以及管理密码所带来的所有额外负担相比,这是一种更好、更安全的方法。如果这听起来像您想探索的东西,请告诉我。