【问题标题】:Terraform s3 event notification errorTerraform s3 事件通知错误
【发布时间】:2017-12-13 16:39:21
【问题描述】:

我在尝试创建 s3 事件通知时遇到问题。有谁知道解决办法吗?

错误是:

*Error applying plan:
1 error(s) occurred:
* module.Test-S3-Bucket.aws_s3_bucket_notification.s3-notification: 1 error(s) occurred:
* aws_s3_bucket_notification.s3-notification: Error putting S3 notification configuration: InvalidArgument: Unable to validate the following destination configurations
status code: 400, request id: AD9B5BF2FF84A6CB, host id: ShUVJ+TdkpqAZfpeDM3grkF9Vue3Q/AF0LydchperKTF6XdQyDM6BisZi/38pGAh/ZqS+gNyrSM=*

下面是给我错误的代码:

resource "aws_s3_bucket" "s3-bucket" {
  bucket = "${var.bucket_name}"
  acl    = ""

  lifecycle_rule {
    enabled = true
    prefix  = ""

    expiration {
      days = 45
    }
  }

  tags {
    CostC = "${var.tag}"
  }
}


resource "aws_s3_bucket_notification" "s3-notification" {

  bucket = "${var.bucket_name}"

  topic {
    topic_arn     = "arn:aws:sns:us-east-1:1223445555:Test"
    events        = [ "s3:ObjectCreated:*", "s3:ObjectRemoved:*" ]
    filter_prefix = "test1/"
  }
}

【问题讨论】:

标签: amazon-s3 amazon-sns terraform


【解决方案1】:

如果您还没有这样做,您需要指定一个关于向 S3 授予 SNS:Publish 权限的主题的策略(仅来自 Condition 属性中指定的存储桶) - 如果您还配置通过 Terraform 的主题然后应该这样做(我们知道,因为它在几天前也吸引了我们!):

resource "aws_sns_topic" "my-sns-topic" {
    name = "Test"
    policy = <<POLICY
{
    "Version":"2012-10-17",
    "Statement":[{
        "Effect": "Allow",
        "Principal": {
            "Service": "s3.amazonaws.com"
            },
        "Action": "SNS:Publish",
        "Resource": "arn:aws:sns:us-east-1:1223445555:Test",
        "Condition":{
            "ArnLike":{"aws:SourceArn":"${aws_s3_bucket.s3-bucket.arn}"}
        }
    }]
}
POLICY
}

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    好吧,我知道这不是你的确切情况,但我有同样的错误,我没有在这里找到答案,因为这篇文章是谷歌给我的第一篇,我会留下答案在这里我的情况,希望它会帮助别人。

    所以,我注意到在应用 Terraform 之后出现了这个错误,我去 UI 看看发生了什么,发现了这个消息:

    Lambda 控制台无法验证此触发器的一个或多个事件源。最常见的原因是源 ARN 包含通配符 (*) 字符。您可以使用 AWS CLI 或 AWS 开发工具包管理未经验证的触发器。

    你猜怎么着?我在 ARN 中确实有一个通配符 (*),如下所示:

    source_arn = "{aws_s3_bucket.bucket.arn}/*"
    

    所以我把它改成了:

    source_arn = aws_s3_bucket.bucket.arn
    

    它奏效了。所以,如果你读到这篇文章 - 你的情况可能会犯同样的错误。

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 2021-02-13
      • 2021-04-24
      • 2019-02-26
      • 1970-01-01
      • 2019-07-17
      • 2021-02-14
      • 2015-03-13
      • 2021-11-21
      相关资源
      最近更新 更多