Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

600
Views
Terraform: múltiples disparadores aws_s3_bucket_notification en el mismo depósito

Necesito crear un disparador para un depósito S3. Usamos lo siguiente para crear el disparador:

 resource "aws_s3_bucket_notification" "bucket_notification" { bucket = var.aws_s3_bucket_id lambda_function { lambda_function_arn = var.lambda_function_arn events = ["s3:ObjectCreated:Put"] filter_prefix = var.filter_prefix filter_suffix = var.filter_suffix } }

Esto funciona bien cuando el depósito aún no tiene un activador, como sucedió en todos los entornos, excepto en la producción. Cuando implementamos la producción, vimos que se eliminó el activador que ya estaba presente en el depósito. Necesitamos ambos disparadores. Pude agregar otro disparador manualmente, por ejemplo, un disparador de evento PUT simplemente cambiando el prefijo, sin embargo, cuando lo hago desde Terraform, el anterior siempre se elimina. ¿Hay algo que me estoy perdiendo?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

La documentación del recurso aws_s3_bucket_notification menciona esto en la parte superior:

NOTA: S3 Buckets solo admite una única configuración de notificación. Declarar múltiples recursos aws_s3_bucket_notification al mismo S3 Bucket causará una diferencia perpetua en la configuración. Consulte el ejemplo "Activar varias funciones de Lambda" para ver una opción.

Su ejemplo muestra cómo se debe hacer esto agregando varios bloques lambda_function en el recurso aws_s3_bucket_notification :

 resource "aws_iam_role" "iam_for_lambda" { name = "iam_for_lambda" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Principal": { "Service": "lambda.amazonaws.com" }, "Effect": "Allow" } ] } EOF } resource "aws_lambda_permission" "allow_bucket1" { statement_id = "AllowExecutionFromS3Bucket1" action = "lambda:InvokeFunction" function_name = "${aws_lambda_function.func1.arn}" principal = "s3.amazonaws.com" source_arn = "${aws_s3_bucket.bucket.arn}" } resource "aws_lambda_function" "func1" { filename = "your-function1.zip" function_name = "example_lambda_name1" role = "${aws_iam_role.iam_for_lambda.arn}" handler = "exports.example" runtime = "go1.x" } resource "aws_lambda_permission" "allow_bucket2" { statement_id = "AllowExecutionFromS3Bucket2" action = "lambda:InvokeFunction" function_name = "${aws_lambda_function.func2.arn}" principal = "s3.amazonaws.com" source_arn = "${aws_s3_bucket.bucket.arn}" } resource "aws_lambda_function" "func2" { filename = "your-function2.zip" function_name = "example_lambda_name2" role = "${aws_iam_role.iam_for_lambda.arn}" handler = "exports.example" } resource "aws_s3_bucket" "bucket" { bucket = "your_bucket_name" } resource "aws_s3_bucket_notification" "bucket_notification" { bucket = "${aws_s3_bucket.bucket.id}" lambda_function { lambda_function_arn = "${aws_lambda_function.func1.arn}" events = ["s3:ObjectCreated:*"] filter_prefix = "AWSLogs/" filter_suffix = ".log" } lambda_function { lambda_function_arn = "${aws_lambda_function.func2.arn}" events = ["s3:ObjectCreated:*"] filter_prefix = "OtherLogs/" filter_suffix = ".log" } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!