[英]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.