#terraform #terraform-provider-aws
Вопрос:
Я пытаюсь настроить синхронизацию данных в AWS с расписанием, однако мне нужно расписание только в 2 средах, есть ли способ использовать условные аргументы, чтобы расписание устанавливалось только в dev и test.
resource "aws_datasync_task" "data-load" {
destination_location_arn = aws_datasync_location_s3.destination.arn
name = "data-load"
source_location_arn = aws_datasync_location_nfs.source.arn
schedule {
schedule_expression = "cron(0 12 ? * SUN,WED *)"
}
}
Я пытался
schedule {
schedule_expression = var.data_sync_schedule
}
variables.tf:
variable "data_sync_schedule" {
default = null
}
dev and test tfvars:
data_sync_schedule = "cron(0 8 * * ? *)"
но для всех других окружений, кроме dev test, я получаю следующую ошибку:
╷
│ Error: Missing required argument
│
│ with aws_datasync_task.data-load[0],
│ on data-sync.tf line 19, in resource "aws_datasync_task" "data-load":
│ 19: schedule_expression = var.data_sync_schedule
│
│ The argument "schedule.0.schedule_expression" is required, but no
│ definition was found.
Любые предложения будут с благодарностью приняты.
Ответ №1:
Вместо того, чтобы пытаться обнулить выражение расписания, вам нужно сделать весь aws_datasync_task
ресурс условным. Вы можете сделать это с помощью аргумента count для ресурса, установив для него значение либо 0
или 1
.
Комментарии:
1. Мне все еще нужна синхронизация данных в других средах, я просто не хочу, чтобы они запускались по расписанию
2. Затем вам нужно сделать
schedule
блок динамическим блоком. terraform.io/docs/language/expressions/dynamic-blocks.html
Ответ №2:
Вы можете сделать следующее:
resource "aws_datasync_task" "data-load" {
destination_location_arn = aws_datasync_location_s3.destination.arn
name = "data-load"
source_location_arn = aws_datasync_location_nfs.source.arn
schedule {
schedule_expression = var.env == 'dev' ? "cron(0 12 ? * SUN,WED *)" : null
}
}
Var.env будет установлен через ваше задание CI / CD