繁体   English   中英

terraform 如何使用模板文件功能指定 apigateway invoke_url 的值 - locals 或 vars 不起作用

[英]terraform how to specify value of apigateway invoke_url using template file feature - locals or vars dont work

我有 apigateway invoke_url 是唯一的,由 terraform 创建,这个唯一的 url 通常具有以下形式

https://123abc.execute-api.us-east-1.amazonaws.com

对于 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM