如何解决在Heroku中使用terraform时,是否有办法在附加组件附加后刷新应用程序状态?
我正在使用Terraform在heroku上设置应用程序。该应用程序需要一个mysql数据库,而我正在使用ClearDB插件。将ClearDB附加到应用程序后,它将设置一个CLEARDB_DATABASE_URL
配置变量。该应用程序要求数据库URL位于DATABASE_URL
配置变量中。
所以我想做的是使用资源heroku_app_config_association
复制
值从CLEARDB_DATABASE_URL
到DATABASE_URL
。问题在于,在创建heroku_app
资源之后,其状态尚不包含CLEARDB_DATABASE_URL
,并且在创建heroku_addon
之后,heroku_app
的状态不会被更新。>
这是我的main.tf
文件的内容:
provider "heroku" {}
resource "heroku_app" "main" {
name = var.app_name
region = "eu"
}
resource "heroku_addon" "database" {
app = heroku_app.main.name
plan = "cleardb:punch"
}
resource "heroku_app_config_association" "main" {
app_id = heroku_app.main.id
sensitive_vars = {
DATABASE_URL = heroku_app.main.all_config_vars.CLEARDB_DATABASE_URL
}
depends_on = [
heroku_addon.database
]
}
这是我得到的错误:
Error: Missing map element
on main.tf line 22,in resource "heroku_app_config_association" "main":
22: DATABASE_URL = heroku_app.main.all_config_vars.CLEARDB_DATABASE_URL
|----------------
| heroku_app.main.all_config_vars is empty map of string
This map does not have an element with the key "CLEARDB_DATABASE_URL".
第二次执行terraform apply
时,配置变量已成功复制。有没有办法让它在第一次运行时起作用?
解决方法
为了获取heroku_app
资源的最新状态,我使用了数据源:
data "heroku_app" "main" {
name = heroku_app.main.name
depends_on = [
heroku_addon.database
]
}
然后我可以访问heroku_app_config_association
资源中的值:
resource "heroku_app_config_association" "main" {
app_id = heroku_app.main.id
sensitive_vars = {
DATABASE_URL = data.heroku_app.main.config_vars.CLEARDB_DATABASE_URL
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。