resource "aws_mwaa_environment" "mwaa_environment" {
  airflow_configuration_options = var.airflow_configuration_options

  name              = local.environment_name
  airflow_version   = var.airflow_version
  environment_class = var.airflow_environment_class
  min_workers       = var.airflow_min_workers
  max_workers       = var.airflow_max_workers

  source_bucket_arn    = data.aws_s3_bucket.sources_bucket.arn
  dag_s3_path          = var.bucket_dags_path
  plugins_s3_path      = var.bucket_plugins_path
  requirements_s3_path = var.bucket_requirements_path

  execution_role_arn = aws_iam_role.execution_role.arn
  kms_key            = aws_kms_key.kms_key.arn

  weekly_maintenance_window_start = var.weekly_maintenance_window_start

  # NB: Currently not possible to set worker replacement strategy via Terraform.
  # See https://github.com/hashicorp/terraform-provider-aws/issues/42842

  logging_configuration {
    dag_processing_logs {
      enabled   = var.airflow_log_enabled
      log_level = var.airflow_log_level
    }

    scheduler_logs {
      enabled   = var.airflow_log_enabled
      log_level = var.airflow_log_level
    }

    task_logs {
      enabled   = var.airflow_log_enabled
      log_level = var.airflow_log_level
    }

    webserver_logs {
      enabled   = var.airflow_log_enabled
      log_level = var.airflow_log_level
    }

    worker_logs {
      enabled   = var.airflow_log_enabled
      log_level = var.airflow_log_level
    }
  }

  network_configuration {
    security_group_ids = [aws_security_group.security_group.id]
    subnet_ids         = var.vpc_subnet_ids
  }

  tags = local.tags

  depends_on = [
    aws_cloudwatch_log_group.log_groups,
    aws_s3_object.dummy_dag_object,
    aws_s3_object.plugins_object,
    aws_s3_object.requirements_object,
  ]

  lifecycle {
    ignore_changes = [
      # These are managed by the code deployment process
      dag_s3_path,
      requirements_s3_path,
    ]
  }
}
