Терраформирование для цикла с созданием многократных ресурсов

#amazon-web-services #for-loop #foreach #terraform #aws-glue

#amazon-веб-сервисы #for-цикл #foreach #терраформирование #aws-клей

Вопрос:

У меня есть простой glue job в aws
Это один из примеров:

 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
 

быть настоящим в терраформе ?

Ответ №1:

Если ваш listjobs :

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

затем вы можете использовать count в terraform для создания нескольких 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"
  }

}
 

Комментарии:

1. Ваш ответ хорош, спасибо вам. Но я решил эту проблему с помощью 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"
  }
}