# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket = "orcd-terraform-state"
    key     = "prod/lambda-kinesis-to-neo4j/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}


module "default_tags" {
  source             = "git@github.com:theorchard/terraform-default-tags.git//?ref=1.0.0"
  environment        = var.environment
  application_family = var.application_family
  service_name       = var.lambda_name
}

provider "aws" {
  region = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}
provider "aws" {
  region  = var.aws_region
  alias   = "networking"
  profile = "networking"

  default_tags {
    tags = module.default_tags.tags
  }
}

module "vpc_info" {
  source = "git@github.com:theorchard/terraform-vpc-info.git?ref=3.1.0"

  environment = var.environment
}

data "aws_caller_identity" "current" {}

module "secrets" {
  source   = "git@github.com:theorchard/terraform-secrets-manager.git//?ref=1.5.1"
  for_each = toset(var.secret_names)

  environment        = var.environment
  service_name       = var.lambda_name
  secret_name        = each.value
  application_family = var.application_family
}

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

  application_family                             = var.application_family
  environment                                    = var.environment
  vpc_id                                         = module.vpc_info.vpc_id
  vpc_subnet_ids                                 = module.vpc_info.default_private_subnet_ids
  lambda_name                                    = var.lambda_name
  use_container_image                            = true
  datadog_advanced_enabled                       = true
  lambda_description                             = "Consumes records from Kinesis in order to update Neo4j"
  lambda_function_memory_size                    = var.lambda_memory_size
  lambda_function_timeout                        = var.lambda_function_timeout
  lambda_function_reserved_concurrent_executions = var.lambda_reserved_concurrent
  zappa_s3_policy_enabled                        = false

  event_source_mapping_enabled                        = true
  event_source_mapping_starting_position              = "LATEST"
  event_source_mapping_batch_size                     = "10"
  event_source_mapping_resource_type                  = "kinesis"
  event_source_mapping_stream_name                    = module.neo4j_kinesis_consumer_stream.kinesis_stream_name
  event_source_mapping_bisect_batch_on_function_error = true

  lambda_function_environment_variables = {
    ENV               = var.environment,
    APPLICATION_NAME  = var.lambda_name,
    AR_MYSQL_USER     = var.ar_mysql_username,
    AR_MYSQL_HOST     = var.ar_mysql_host,
    AR_MYSQL_PORT     = var.ar_mysql_port,
    AR_MYSQL_DATABASE = var.ar_mysql_database_name,
  }
}

