AWS平台:如何在对象路径上每个S3存储桶过滤多个事件?

问题描述 投票:2回答:1

我的理解是,在使用Terraform配置S3 bucket notification时,我们只能为每个S3存储桶配置单个通知:

NOTE: S3 Buckets only support a single notification configuration. Declaring multiple
ws_s3_bucket_notification resources to the same S3 Bucket will cause a perpetual difference in
configuration. See the example "Trigger multiple Lambda functions" for an option.

应用程序使用单个S3存储桶作为数据存储库,即,当JSON文件到达那里时,它们会触发一个lambda,该lambda提交相应的批处理作业,以从文件中提取到数据库中。

[这在我们只有一个开发人员部署基础结构的情况下效果很好,但是当我们每个人运行terraform apply时都有多个开发人员,那么它将更新存储桶的唯一/单个通知,从而覆盖资源的先前设置。

使用S3存储桶进行通知的最佳做法是什么?是否为每个Terraform工作区配置/创建了最好的存储区,和/或如何管理存储区以允许同时开发人员使用通用的S3存储区通过terraform apply来站/放下基础架构资源?根据文档的建议,您是否必须为此用例在每个工作区中使用一个存储桶?

我拥有S3通知的当前Terraform(允许使用最新配置覆盖的代码):

data "aws_s3_bucket" "default" {
  bucket = var.bucket
}

resource "aws_lambda_permission" "allow_bucket_execution" {
  statement_id  = "AllowExecutionFromS3Bucket"
  action        = "lambda:InvokeFunction"
  function_name = var.lambda_function_name
  principal     = "s3.amazonaws.com"
  source_arn    = data.aws_s3_bucket.default.arn
}

resource "aws_s3_bucket_notification" "bucket_notification" {
  bucket = data.aws_s3_bucket.default.bucket

  lambda_function {
    lambda_function_arn = var.lambda_function_arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = var.namespace
    filter_suffix       = ".json"
  }
}

namespace变量作为"${local.env}-${terraform.workspace}"传入,local.env作为“ dev”,“ uat”,“ prod”等。

我们如何修改上面的Terraform代码以允许每个S3存储桶有多个通知(每个Terraform工作区基本上是一个通知),还是不能做到?如果没有,那么如何最好地处理呢?我是否应该仅使用每个工作区使用一个存储桶,并使用上述名称空间变量作为S3存储桶名称,并在部署时将其相应地更新到生产存储桶?

我的理解是,在使用Terraform配置S3存储桶通知时,我们只能为每个S3存储桶配置一个通知:注意:S3存储桶仅支持单个通知...

amazon-web-services amazon-s3 terraform terraform-provider-aws
1个回答
0
投票

您有几种选择,取决于您的需求:

© www.soinside.com 2019 - 2024. All rights reserved.