# This lambda is to replace maxwell-cloudsearch-two

# re-use the same stream.
data "aws_kinesis_stream" "stream" {
  name = "${var.environment}-maxwell-cloudsearch"
}

# Reuse default policy that gives RW access to this OpenSearch domain.
data "aws_iam_policy" "os_default_rw_policy" {
  name = "Elasticsearch-${var.environment}-${var.opensearch_domain}-RW-policy"
}

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

  environment        = var.environment
  application_family = var.application_family
  lambda_name        = local.lambda_full_name

  use_container_image                            = true
  lambda_description                             = "Updates Opensearch content-search indexes using AR CDC Kinesis events."
  lambda_function_timeout                        = "600"
  lambda_function_reserved_concurrent_executions = 3 # match old lambda
  vpc_enabled                                    = true
  vpc_id                                         = module.vpc_info.vpc_id
  vpc_subnet_ids                                 = module.vpc_info.default_private_subnet_ids
  datadog_enabled                                = true
  datadog_advanced_enabled                       = true
  datadog_advanced_merge_xray_traces_enabled     = false
  datadog_advanced_trace_enabled                 = true
  datadog_advanced_apm_enabled                   = true

  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                    = data.aws_kinesis_stream.stream.name
  event_source_mapping_bisect_batch_on_function_error = true
  event_source_mapping_maximum_retry_attempts         = 2

  iam_managed_policy_attachments = [
    data.aws_iam_policy.os_default_rw_policy.arn,
  ]

  lambda_function_environment_variables = {
    ENVIRONMENT                = var.environment
    SENTRY_DSN                 = module.sentry_lambda_full_name.sentry_key_dsn_public_output
    OPENSEARCH_HOST            = var.opensearch_host
    OPENSEARCH_PORT            = var.opensearch_port
    OPENSEARCH_DEFAULT_TIMEOUT = 60
    OPENSEARCH_USER            = var.opensearch_user
    OPENSEARCH_POOL_MAXSIZE    = 10
  }
}


module "meta_secret" {
  source = "git@github.com:theorchard/terraform-secrets-manager.git//?ref=1.5.3"

  environment                    = var.environment
  service_name                   = local.lambda_full_name
  secret_name                    = "OPENSEARCH_PASSWORD"
  application_family             = var.application_family
  secret_recovery_window_in_days = 7
}


# stage datadog creds and create dashboards.
module "datadog_lambda_ar_search_ingest" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.18.2"

  environment                       = var.environment
  service_name                      = local.lambda_full_name
  notification_endpoints            = var.notification_endpoints
  escalation_notification_endpoints = var.notification_endpoints
}

module "sentry_lambda_full_name" {
  source = "git@github.com:theorchard/terraform-sentry.git//?ref=5.0.0"

  environment        = var.environment
  service_name       = local.lambda_full_name
  application_family = var.application_family
}
