【问题标题】:Terraform for loop with creating of multiply resources用于创建多重资源的 Terraform for 循环
【发布时间】:2021-03-11 23:02:42
【问题描述】:

我在aws中有简单的glue job
这是一个例子:

resource "aws_glue_job" "myjob1" {
  name     = "myjob1"
  role_arn = var.role_arn

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

它正在工作,但如果我有类似列表myjob1,myjob2,myjob3,myjob4,myjob5 的东西。
可能是,这个来自 bash 的深奥示例:

listjobs="myjob1 myjob2 myjob3 myjob4 myjob5"

for i in ${listjobs}; do
resource "aws_glue_job" "$i" {
  name     = "$i"
  role_arn = var.role_arn

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

在 terraform 中是真实的?

【问题讨论】:

    标签: amazon-web-services for-loop foreach terraform aws-glue


    【解决方案1】:

    如果您的listjobs 是:

    variable "listjobs" {
      default = ["myjob1", "myjob2", "myjob3", "myjob4", "myjob5"]
    }
    

    那么你可以在terraform中使用count创建多个aws_glue_job:

    resource "aws_glue_job" {
    
      count = length(var.listjobs)  
    
      name     = var.listjobs[count.index]
    
      role_arn = var.role_arn
    
      command {
        name = "pythonshell"
        python_version = 3
        script_location = "s3://mybucket/${var.listjobs[count.index]}/run.py"
      }
    
    }
    

    【讨论】:

    • 您的回答很好,谢谢。但我通过for loop 解决了这个问题,请看我的帖子。
    【解决方案2】:

    我通过for loop 解决了这个问题。 在variables.tf

    variable "list_of_jobs" {
      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"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 2018-06-26
      • 2021-11-04
      • 1970-01-01
      • 2021-11-25
      • 2021-05-21
      相关资源
      最近更新 更多