Terraform - Error creating Cloudwatch log subscription filter: InvalidParameterException

Viewed 1429

I am currently stuck with the following error -

Error: Error creating Cloudwatch log subscription filter: InvalidParameterException: Could not execute the lambda function. Make sure you have given CloudWatch Logs permission to execute your function.

data "aws_iam_role" "example" {
    name = "notification_lambda_role"
}

module "lambda_function_existing_package_s3" {
        source = "terraform-aws-modules/lambda/aws"

        function_name = "rr-snowplow-lambda-function-test"
        description   = "My awesome lambda function"
        handler       = "lambda_function.lambda_handler"
        runtime       = "python3.8"

        create_role = false
        lambda_role = data.aws_iam_role.example.arn

        create_package      = false
        s3_existing_package = {
                bucket = aws_s3_bucket.snowplow_error_log_lambda_source_bucket.id
                key    = aws_s3_bucket_object.snowplow_error_log_processor_zip.id
        }
}

resource "aws_cloudwatch_log_group" "test-app-loggroup" {
  name              = "test-app"
  retention_in_days = 90
}


resource "aws_lambda_permission" "allow_cloudwatch" {
  action        = "lambda:InvokeFunction"
  function_name = module.lambda_function_existing_package_s3.lambda_function_name
  principal     = "events.amazonaws.com"
  source_arn    = format("%s:*",aws_cloudwatch_log_group.test-app-loggroup.arn)
}

resource "aws_cloudwatch_log_subscription_filter" "test_lambdafunction_logfilter" {
  name            = "test_lambdafunction_logfilter"
  log_group_name  = "/rr/snowplow/e2-dev"
  filter_pattern  = "ERROR"
  destination_arn = module.lambda_function_existing_package_s3.lambda_function_arn
  depends_on = [ aws_lambda_permission.allow_cloudwatch ]

Terraform version: 0.13.7

Everything works fine when I create a subscription filter using a management console however it's not working when I try to do it via terraform. What could be wrong here?

1 Answers

events.amazonaws.com is for CloudWatch Events, not Logs. For logs you need logs.region.amazonaws.com. Please check subscription docs for details of permissions needed.

Also you are giving permissions to test-app, but you are subscribing /rr/snowplow/e2-dev.

Related