【问题标题】:Does Terraform perform interpolation in provider declarations?Terraform 是否在提供者声明中执行插值?
【发布时间】:2016-11-28 01:21:51
【问题描述】:

我正在尝试声明以下 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 似乎没有在我的端点字符串上执行插值,但我在文档中没有看到任何关于此的内容——什么给出了?

【问题讨论】:

  • 您对aws_db_instance main 的资源定义是什么样的?
  • 此外,mysql 提供程序文档中的示例似乎暗示 aws_db_instance...endpoint 将端口作为输出的一部分返回,因此您不需要再次附加它。 terraform.io/docs/providers/mysql/index.html

标签: terraform


【解决方案1】:

是的,确实如此。 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}"
}

【讨论】:

  • vscode terraform 插件可能会在 HCL2 插值语句下划线,就好像它们是非法的一样。
【解决方案2】:

我遇到了一组类似的错误消息(“连接失败”、“无效域查找”)并对此进行了一些研究。我希望这可以帮助您或其他人在 Terraform 中跨云和数据库提供商工作。

这似乎归结为 MySQL 提供程序在初始化后尝试建立数据库连接,如果您尝试构建数据库服务器并在其上配置数据库/授权,这可能是一个问题 作为同一 Terraform 运行的一部分。提供者的初始化基于 Terraform 在您的 Terraform 代码中找到该提供者拥有的资源,并且由于此连接尝试在提供者初始化时发生,因此您无法使用 -target=<SPECIFIC RESOURCE> 解决此问题。

我能想到的解决方法是拥有一个用于设置数据库服务器的代码库和一个用于设置数据库授权等的不同代码库……或者让 Terraform 启动一个为您工作的脚本(当然是动态参数!)。无论哪种方式,您都可以有效地从初始 Terraform 运行中删除 mysql_* 资源,这就是解决此问题的方法。

这里可能需要进行一些代码更改 - Terraform MySQL 提供程序需要延迟连接到数据库,直到 Terraform 告诉它对资源运行操作,并且它可能 有必要了解 Terraform 如何处理供应商之间的依赖关系。我尝试为mysql_database 资源修改延迟连接逻辑,看看是否解决了我的所有问题,Terraform 仍然抱怨图中存在依赖循环。

您可以在此处跟踪 MySQL 提供程序问题:

https://github.com/terraform-providers/terraform-provider-mysql/issues/2

之前提供者的 cmets 被拆分为自己的可发布代码库:

https://github.com/hashicorp/terraform/issues/5687

【讨论】:

    猜你喜欢
    • 2019-01-24
    • 2019-12-22
    • 2021-09-04
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多