data "aws_iam_policy_document" "elasticsearch_policy_document" {
  statement {
    actions = ["es:*"]

    resources = [
      "arn:aws:es:us-east-1:019963779799:domain/sme-switchboard-prod-es",
    ]
  }

  statement {
    actions = ["es:ListDomainNames"]

    resources = ["*"]
  }
}

resource "aws_iam_policy" "elasticsearch_policy" {
  name   = "${var.environment}-switchboard-streaming-to-es-policy"
  policy = data.aws_iam_policy_document.elasticsearch_policy_document.json
}

resource "aws_cloudwatch_log_subscription_filter" "switchboard_producer_logs" {
  name            = "${var.environment}-switchboard-producer-lambda-logs-subscription-filter"
  log_group_name  = "/aws/lambda/switchboard-producer-${var.environment}"
  filter_pattern  = ""
  destination_arn = module.lambda_switchboard_logs_to_es.lambda_arn

  depends_on = [aws_lambda_permission.switchboard_producer_logs]
}

resource "aws_lambda_permission" "switchboard_producer_logs" {
  statement_id  = "lambda-switchboard-producer-${var.environment}-logs"
  action        = "lambda:InvokeFunction"
  function_name = module.lambda_switchboard_logs_to_es.lambda_arn
  principal     = "logs.${var.aws_region}.amazonaws.com"
  source_arn    = "arn:aws:logs:us-east-1:437795906767:log-group:/aws/lambda/switchboard-producer-${var.environment}:*"
}

resource "aws_cloudwatch_log_subscription_filter" "switchboard_consumer_logs" {
  name            = "${var.environment}-${var.service_name}-logs-subscription-filter"
  log_group_name  = "${var.environment}-${var.service_name}"
  filter_pattern  = ""
  destination_arn = module.lambda_switchboard_logs_to_es.lambda_arn

  depends_on = [aws_lambda_permission.switchboard_consumer_logs]
}

resource "aws_lambda_permission" "switchboard_consumer_logs" {
  statement_id  = "${var.environment}-${var.service_name}-logs"
  action        = "lambda:InvokeFunction"
  function_name = module.lambda_switchboard_logs_to_es.lambda_arn
  principal     = "logs.${var.aws_region}.amazonaws.com"
  source_arn    = "arn:aws:logs:us-east-1:437795906767:log-group:${var.environment}-${var.service_name}:*"
}

module "lambda_switchboard_logs_to_es" {
  source = "git@github.com:theorchard/terraform-lambda.git//?ref=1.2.1"

  environment                  = var.environment
  use_custom_function_name     = true
  custom_function_name         = "switchboard-logs-to-es-${var.environment}"
  lambda_name                  = "switchboard-logs-to-es"
  lambda_runtime               = "nodejs8.10"
  lambda_description           = "CloudWatch Logs to Amazon ES streaming"
  lambda_function_package_path = "lambda.zip"
  lambda_function_timeout      = "600"
  lambda_function_handler      = "index.handler"
  vpc_subnet_ids               = ["subnet-cb4dbae0", "subnet-5366ef24"]
  vpc_security_group_ids       = ["sg-21f1ed44"]
  lambda_function_memory_size  = "512"
  datadog_enabled              = false

  lambda_function_environment_variables = {
    Environment = var.environment
  }

  iam_managed_policy_attachments = [
    "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess",
    aws_iam_policy.elasticsearch_policy.arn,
  ]
}

