Terraform : S3 trigger code is failing with status-code : 400

In terraform , Trying to S3 bucket as trigger to my lambda and giving the permissions. For this use case , creating S3 resource and trying to refer that lambda function in triggering logic. But When I refer code is failing with below error.Please help me to resolve this issue .

#########################################
# Creating Lambda resource
###########################################

resource "aws_lambda_function" "test_lambda" {
  filename      = "output/welcome.zip"
  function_name = var.function_name
  role          = var.role_name
  handler       = var.handler_name
  runtime       = var.run_time
}


######################################################
# Creating s3 resource for invoking to lambda function
######################################################

resource "aws_s3_bucket" "bucket" {
  bucket = "source-bucktet-testing"

}

#####################################################################
# Adding S3 bucket as trigger to my lambda and giving the permissions
#####################################################################

resource "aws_s3_bucket_notification" "aws-lambda-trigger" {
  bucket = aws_s3_bucket.bucket.id
  lambda_function {
    lambda_function_arn = aws_lambda_function.test_lambda.arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "file-prefix"
    filter_suffix       = "file-extension"
}
}




resource "aws_lambda_permission" "test" {
  statement_id  = "AllowS3Invoke"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.test_lambda.function_name
  principal = "s3.amazonaws.com"
  source_arn = "arn:aws:s3:::aws_s3_bucket.bucket.id"
}

Error Message :

Error: Error putting S3 notification configuration: InvalidArgument: Unable to validate the following destination configurations
        status code: 400, request id: 8D16EE1EF8FC0E63, host id: PlzqurwmHo3hDJdr0nUhOGuJKnghOBCtMImZ+8fEFX3JPjKV2M47UZuJ5Z26FalKxmoF1Xl8lag=

Upvotes: 0

Views: 3316

Answers (1)

Marcin
Marcin

Reputation: 238747

Your source_arn in aws_lambda_permission is incorrect. It should be:

source_arn = aws_s3_bucket.bucket.arn

At present your source_arn is literally string "arn:aws:s3:::aws_s3_bucket.bucket.id", which is incorrect.

Upvotes: 0

Related Questions