[英]terraform how to specify value of apigateway invoke_url using template file feature - locals or vars dont work
我有 apigateway invoke_url 是唯一的,由 terraform 创建,这个唯一的 url 通常具有以下形式
对于 s3 object,该值必须在 index.html 内部为index.html
,我正在使用 terraform 的模板功能:
<!DOCTYPE html>
<html>
SOME CODE
var backend_url = "${backend_api_gateway}/voting"
some code
});
</html>
在 tf 中尝试使用“本地人”无效:
locals {
backend_api_gateway = "${aws_apigatewayv2_stage.default.invoke_url}"
}
resource "aws_s3_object" "index_file_vote" {
bucket = aws_s3_bucket.frontend_vote.id
key = "index.html"
content = templatefile("./vote/index.html.tpl", {
backend_api_url = local.backend_api_gateway
})
depends_on = [aws_s3_bucket.frontend_vote, aws_apigatewayv2_api.main_apigateway]
}
它给出了错误:
Invalid function argument
│
│ on s3_bucket_vote.tf line 93, in resource "aws_s3_object" "index_file_vote":
│ 93: content = templatefile("./vote/index.html.tpl", {
│ 94: backend_api_url = local.backend_api_gateway
│ 95: })
│ ├────────────────
│ │ local.backend_api_gateway will be known only after apply│
│ Invalid value for "vars" parameter: vars map does not contain
│ key "backend_api_gateway", referenced at
│ ./vote/index.html.tpl:34,28-47.
尝试使用 vars,声明要创建的未来 apigateway 的调用 url 不起作用:
variable "backend_api_gateway" {
type = string
default = "${aws_apigatewayv2_stage.default.invoke_url}" // error 'variables not allowed'
}
由于不涉及任何模块,因此应该很容易修复。 首先,分配给变量的值必须远离 go,因为不可能以这种方式使用它。 其次,你实际上什至不需要它。 第三,您正在使用显式依赖项,这也是不需要的。 此外,即使使用局部变量没有任何问题,也没有必要。 这是所需的更改:
resource "aws_s3_object" "index_file_vote" {
bucket = aws_s3_bucket.frontend_vote.id
key = "index.html"
content = templatefile("./vote/index.html.tpl", {
backend_api_url = aws_apigatewayv2_stage.default.invoke_url
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.