#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"
}
}