You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform引用模块内Firehose资源ARN触发Unsupported attribute错误

问题排查:Terraform模块无法引用Firehose流ARN

问题场景与配置

我在/modules/firehose目录下定义了如下配置:

resource "aws_kinesis_firehose_delivery_stream" "purchase_logs_firehose_stream" {
  name        = var.firehose_stream_name
  destination = "extended_s3"
  extended_s3_configuration {
    role_arn        = var.firehose_role_arn
    buffer_interval = 60
    buffer_size     = 64
    bucket_arn      = var.destination_bucket_arn
  }
}
variable "firehose_stream_name" {
  description = "流名称"
}

variable "firehose_role_arn" {
}

variable "destination_bucket_arn" {
}

根目录中引入该模块的配置:

module "purchase_logs_firehose_prod" {
  source                 = "./modules/firehose"
  firehose_stream_name   = "purchase_logs_firehose_prod"
  firehose_role_arn      = aws_iam_role.purchase_logs_firehose_role.arn
  destination_bucket_arn = aws_s3_bucket.purchase_logs_destination_prod.arn
}
resource "aws_s3_bucket" "purchase_logs_destination_prod" {
  bucket = "purchase-logs-prod-dump"
}

问题描述

根据AWS Terraform Provider文档,aws_kinesis_firehose_delivery_stream资源确实存在arn属性,但我在iam.tf中尝试通过module.purchase_logs_firehose_prod.arn引用时,报错如下:

│ Error: Unsupported attribute
│ 
│   on iam.tf line 83, in resource "aws_iam_policy" "ec2_policy":
│   83:             ${module.purchase_logs_firehose_prod.arn}
│     ├────────────────
│     │ module.purchase_logs_firehose_prod is a object
│ 
│ This object does not have an attribute named "arn".

即使移除报错代码执行terraform apply后,状态文件里能看到该Firehose资源的arn属性,但就是无法通过模块引用,求排查原因。

引用位置配置(iam.tf)

resource "aws_iam_policy" "ec2_policy" {
  name        = "ec2-policy"


  policy = <<EOF
{
  "Version":"2012-10-17",
  "Statement":[
      {
        "Effect":"Allow",
        "Action":[
            "*"
        ],
        "Resource":[
            "${module.purchase_logs_firehose_prod.arn}" 
        ]
      }
  ]
}
EOF

}

解决方案

问题核心是Terraform模块不会自动导出内部资源的属性,必须显式声明输出(output)才能让外部引用。

在/modules/firehose目录下新建outputs.tf文件,添加以下内容:

output "arn" {
  description = "Kinesis Firehose投递流ARN"
  value       = aws_kinesis_firehose_delivery_stream.purchase_logs_firehose_stream.arn
}

添加完成后重新执行terraform plan,即可正常通过module.purchase_logs_firehose_prod.arn引用该ARN属性。

内容的提问来源于stack exchange,提问作者OctaveParango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:53:17