将变量传递给 terraform 动态块 v12

Posted

技术标签:

【中文标题】将变量传递给 terraform 动态块 v12【英文标题】:passing variable to terraform dynamic block v12 【发布时间】:2020-10-13 16:54:15 【问题描述】:

我正在尝试使用此 repo 中的代码 https://github.com/jmgreg31/terraform-aws-cloudfront/

但在设置变量时遇到了困难。

我的 variables.tf 有这个值,但不知何故它不起作用:

variable "dynamic_s3_origin_config" 
default =
[
  
    domain_name            = "domain.s3.amazonaws.com"
    origin_id              = "S3-domain-cert"
    origin_access_identity = "origin-access-identity/cloudfront/1234"
  ,
  
    domain_name            = "domain2.s3.amazonaws.com"
    origin_id              = "S3-domain2-cert"
    origin_access_identity = "origin-access-identity/cloudfront/1234"
    origin_path            = ""
  
]


模块中的变量定义如下:

variable dynamic_s3_origin_config 
  description = "Configuration for the s3 origin config to be used in dynamic block"
  type        = list(map(string))
  default     = []

有人可以帮我理解我在这里做错了什么吗?

terraform plan

Error: Invalid expression

  on variables.tf line 65, in variable "dynamic_s3_origin_config":
  65:
  66:

Expected the start of an expression, but found an invalid expression token.

【问题讨论】:

【参考方案1】:

default = 和表达式的开头之间不能有换行符。尝试将您的块更改为:

variable "dynamic_s3_origin_config" 
  default = [
    
      domain_name            = "domain.s3.amazonaws.com"
      origin_id              = "S3-domain-cert"
      origin_access_identity = "origin-access-identity/cloudfront/1234"
    ,
    
      domain_name            = "domain2.s3.amazonaws.com"
      origin_id              = "S3-domain2-cert"
      origin_access_identity = "origin-access-identity/cloudfront/1234"
      origin_path            = ""
    
  ]

【讨论】:

这在 v12 中是否不正确:$var.lambda_at_edge_arn:$var.lambda_version" 或 "var.lambda_at_edge_arn:var.lambda_version" 也可以使用 第一个是正确的。在 0.12 中您仍然以相同的方式插入变量。

以上是关于将变量传递给 terraform 动态块 v12的主要内容,如果未能解决你的问题,请参考以下文章

Terraform - 无法将字符串变量传递给子模块

将 Terraform 变量中的数字传递给 Ansible Playbook

Terraform:如何将变量传递给 user_data 初始化脚本

如何在 Terraform 变量中连接 S3 存储桶名称并将其传递给主 tf 文件

Terraform 动态块

如何将数据源从一个模块引用到另一个模块并将其作为变量传递给根模块?