首页 > 解决方案 > Terraform 不起作用输入和环境变量

问题描述

我有一个glue jobaws. 我做了一个循环。

variables.tf

variable "list_of_jobs" {
  type = list(string)
  default = ["myjob1","myjob2","myjob3"]
}

glue.tf

resource "aws_glue_job" "this" {
  for_each = toset(var.list_of_jobs)
  name     = each.value
  role_arn = var.role_arn

  command {
    name = "pythonshell"
    python_version = 3
    script_location = "s3://mybucket/${each.value}/run.py"
  }
}

main.tf

variable "region" {}
variable "list_of_jobs" {}

module "my_glue" {
  source = "../terraform-glue"
  region = var.region
  list_of_jobs = var.list_of_jobs
}

这个循环工作正常,glue jobs执行后我有 3 个terraform apply. 问题,当我试图使:

export TF_VAR_list_of_jobs='["myjob1","myjob2","myjob3"]'

在这种情况下,当我制作时terraform apply,我会收到以下信息:

Error: Invalid function argument

  on ../terraform-glue/glue.tf line 2, in resource "aws_glue_job" "this":
   2:   for_each = toset(var.list_of_jobs)
    |----------------
    | var.list_of_jobsis "[\"myjob1\",\"myjob2\",\"myjob3\"]"

Invalid value for "v" parameter: cannot convert string to set of any single
type.

输入变量,也不起作用。唯一的变量来自variables.tf。请问你能帮帮我吗 ?我试图在整个晚上解决这个问题。

标签: listamazon-web-servicesfor-loopenvironment-variablesterraform

解决方案


它不起作用,因为如果要通过 env 变量传递复杂变量,则需要为复杂变量提供类型约束:

variable "list_of_jobs" {
  type    = list(string)
  default = ["myjob1","myjob2","myjob3"]
}

推荐阅读