Terraform: динамически создавать триггер cloudwatchlog из списка, используя for-each - PullRequest
0 голосов
/ 17 января 2020

Я хочу создать несколько триггеров CloudwatchLog для моей лямбды и хочу сделать это динамически.

У меня есть набор aws журналов, таких как:

"/aws/lambda/log_group_1"
"/aws/lambda/log_group_2"
"/aws/lambda/log_group_3"

И для каждого из этих logGroups я должен создать следующий конфиг, так что все триггеры на месте. (Пример для первого случая)

variable "api_1_log_group" {
  description = "Log Group - Api 1"
  default     = "/aws/lambda/log_group_1"
}

data "aws_cloudwatch_log_group" "log_group_1"
    name = "${var.api_1_log_group}"
}

resource "aws_lambda_permission" "api_1_trigger" {
  statement_id  = "AllowExecutionFromCloudWatch"
  action        = "lambda:InvokeFunction"
  function_name = var.my_lambda
  principal     = "logs.${var.region}.amazonaws.com"
  source_arn    = "${data.aws_cloudwatch_log_group.log_group_1.arn}"
}

resource "aws_cloudwatch_log_subscription_filter" "api_1" {
  depends_on      = ["aws_lambda_permission.api_1_trigger"]
  name            = "api_1"
  log_group_name  = "${var.api_1_log_group}"
  filter_pattern  = ""
  destination_arn = var.my_lambda
}

По-видимому, в версии terraform> 12.0, for и forEach. Но я не могу понять, как я могу использовать их для создания желаемой настройки инфраструктуры с помощью массива, например, logGroupNames , вместо того, чтобы повторять этот код для каждого создания триггера.

В этом ссылка от Terraform также упоминается, что в более поздней версии Terraform будет поддерживаться динамическое создание ресурсов c из списков и пока не поддерживается, когда оно публикуется (и оно публикуется в июле 2018 года, поэтому я думаю, что оно должно уже возможно) HashiCorp Terraform 0.12 Предварительный просмотр: для и для каждого

...