provider "aws" {
  region = var.aws_region
}

terraform {
  backend "s3" {
    bucket  = "dev-orcd-terraform-state"
    key     = "dev/lambda-data-alarm-slack/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "aws_caller_identity" "current" {}

data "aws_vpc" "vpc" {
  tags = {
    Name = var.environment
  }
}

data "aws_subnets" "private_subnets" {
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.vpc.id]
  }

  tags = {
    Name = "*_private_*"
  }
}

module "data-alarm-slack-lambda" {
  source = "git@github.com:theorchard/terraform-lambda.git?ref=2.12.0"

  environment              = var.environment
  lambda_name              = var.service_name
  lambda_description       = "Creates an sns to slack lambda sender"
  application_family       = var.application_family
  use_container_image      = true
  datadog_advanced_enabled = false
  splitio_enabled          = false
  vpc_subnet_ids           = var.vpc_subnet_ids
  vpc_id                   = var.vpc_id

  dlq_enabled = false

  lambda_function_environment_variables = {
    slack_channel = var.slack_channel
    hook_url      = var.hook_url
  }

}

resource "aws_ecr_repository" "data_alarm_slack" {
  name                 = "data_alarm_slack"
  image_tag_mutability = "MUTABLE"

  encryption_configuration {
    encryption_type = "KMS"
  }

  image_scanning_configuration {
    scan_on_push = true
  }

  tags = {
    environment        = var.environment
    service_name       = var.service_name
    application_family = var.application_family
    terraformed        = true
  }
}

resource "aws_sns_topic" "data_alarm_slack_sns" {
  name              = var.sns_queue_name
  kms_master_key_id = "alias/aws/sns"

  tags = {
    terraformed        = true
    application_family = var.application_family
  }
}

resource "aws_lambda_permission" "with_sns" {
  statement_id  = "AllowExecutionFromSNS"
  action        = "lambda:InvokeFunction"
  function_name = module.data-alarm-slack-lambda.lambda_name
  principal     = "sns.amazonaws.com"
  source_arn    = aws_sns_topic.data_alarm_slack_sns.arn
}
