Terraform 是否在提供者声明中执行插值?
Does Terraform perform interpolation in provider declarations?
我正在尝试声明以下 Terraform 提供程序:
provider "mysql" {
endpoint = "${aws_db_instance.main.endpoint}:3306"
username = "root"
password = "root"
}
我收到以下错误:
Error refreshing state: 1 error(s) occurred:
* dial tcp: lookup ${aws_db_instance.main.endpoint}: invalid domain name
Terraform 似乎没有对我的端点字符串执行插值,但我在文档中没有看到任何关于此的内容 - 给出了什么?
是的,确实如此。 https://www.terraform.io/docs/providers/mysql/
的文档中有一个示例
# Configure the MySQL provider based on the outcome of
# creating the aws_db_instance.
provider "mysql" {
endpoint = "${aws_db_instance.default.endpoint}"
username = "${aws_db_instance.default.username}"
password = "${aws_db_instance.default.password}"
}
我 运行 进入了一组类似的错误消息 ("connect failed," "invalid domain lookup") 并对此进行了一些调查。我希望这对您或其他在 Terraform 中跨云和数据库提供商工作的人有所帮助。
这似乎归结为 MySQL 提供程序在初始化后立即尝试建立数据库连接,如果您尝试构建数据库服务器,这可能是个问题 并将数据库/g运行ts 配置为同一 Terraform 运行 的一部分。提供程序根据 Terraform 在 Terraform 代码中找到该提供程序拥有的资源进行初始化,并且由于此连接尝试发生在提供程序初始化时,因此您无法使用 -target=<SPECIFIC RESOURCE>
解决此问题。
我能想到的解决方法是拥有一个用于设置数据库服务器的代码库和一个用于设置数据库 g运行ts 等的不同代码库......或者启动 Terraform一个为你工作的脚本(当然有动态参数!)。无论哪种方式,您都有效地从初始 Terraform 运行 中删除了 mysql_*
资源,这就是解决此问题的方法。
此处可能需要进行一些代码更改 - Terraform MySQL 提供程序需要延迟连接到数据库,直到 Terraform 告诉它 运行 对资源进行操作,并且 可能 有必要了解 Terraform 如何处理跨提供商的依赖关系。我尝试仅针对 mysql_database
资源修改延迟连接逻辑,看看是否解决了我的所有问题,Terraform 仍然抱怨图中存在依赖循环。
您可以在此处跟踪 MySQL 提供商问题:
https://github.com/terraform-providers/terraform-provider-mysql/issues/2
供应商之前的评论被拆分成他们自己的可发布代码库:
我正在尝试声明以下 Terraform 提供程序:
provider "mysql" {
endpoint = "${aws_db_instance.main.endpoint}:3306"
username = "root"
password = "root"
}
我收到以下错误:
Error refreshing state: 1 error(s) occurred:
* dial tcp: lookup ${aws_db_instance.main.endpoint}: invalid domain name
Terraform 似乎没有对我的端点字符串执行插值,但我在文档中没有看到任何关于此的内容 - 给出了什么?
是的,确实如此。 https://www.terraform.io/docs/providers/mysql/
的文档中有一个示例# Configure the MySQL provider based on the outcome of
# creating the aws_db_instance.
provider "mysql" {
endpoint = "${aws_db_instance.default.endpoint}"
username = "${aws_db_instance.default.username}"
password = "${aws_db_instance.default.password}"
}
我 运行 进入了一组类似的错误消息 ("connect failed," "invalid domain lookup") 并对此进行了一些调查。我希望这对您或其他在 Terraform 中跨云和数据库提供商工作的人有所帮助。
这似乎归结为 MySQL 提供程序在初始化后立即尝试建立数据库连接,如果您尝试构建数据库服务器,这可能是个问题 并将数据库/g运行ts 配置为同一 Terraform 运行 的一部分。提供程序根据 Terraform 在 Terraform 代码中找到该提供程序拥有的资源进行初始化,并且由于此连接尝试发生在提供程序初始化时,因此您无法使用 -target=<SPECIFIC RESOURCE>
解决此问题。
我能想到的解决方法是拥有一个用于设置数据库服务器的代码库和一个用于设置数据库 g运行ts 等的不同代码库......或者启动 Terraform一个为你工作的脚本(当然有动态参数!)。无论哪种方式,您都有效地从初始 Terraform 运行 中删除了 mysql_*
资源,这就是解决此问题的方法。
此处可能需要进行一些代码更改 - Terraform MySQL 提供程序需要延迟连接到数据库,直到 Terraform 告诉它 运行 对资源进行操作,并且 可能 有必要了解 Terraform 如何处理跨提供商的依赖关系。我尝试仅针对 mysql_database
资源修改延迟连接逻辑,看看是否解决了我的所有问题,Terraform 仍然抱怨图中存在依赖循环。
您可以在此处跟踪 MySQL 提供商问题:
https://github.com/terraform-providers/terraform-provider-mysql/issues/2
供应商之前的评论被拆分成他们自己的可发布代码库: