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

使用Terraform创建AWS IoT主题规则时调用topic()内置函数的方法

解决方案:Terraform中调用AWS IoT内置函数

错误原因

你当前的写法是让Terraform直接解析topic(3),但topic()是AWS IoT规则引擎的SQL内置函数,并非Terraform的内置函数,因此Terraform会报错“不存在名为'topic'的函数”。需要将AWS IoT的表达式作为字符串传递给AWS服务端,由AWS来执行这些函数。

修正后的代码示例

有两种可行的写法:

方法1:使用转义美元符号

在Terraform字符串中,用$${}代替${},让Terraform将其解析为单个${}传递给AWS IoT:

resource "aws_iot_topic_rule" "rule" {
  # 其他必填配置(如name、sql等)

  kafka {
    # 其他Kafka配置(如topic_arn等)
    key = "$${sha1(topic(3))}"
  }
}

方法2:使用单引号包裹字符串

HCL的单引号字符串不会解析内部的$符号,可直接传递原始表达式给AWS IoT:

resource "aws_iot_topic_rule" "rule" {
  # 其他必填配置(如name、sql等)

  kafka {
    # 其他Kafka配置(如topic_arn等)
    key = '${sha1(topic(3))}'
  }
}

原理说明

两种写法的核心都是让Terraform不尝试解析AWS IoT的内置函数,而是将完整的表达式字符串传递给AWS IoT服务。AWS IoT规则引擎接收到表达式后,会识别并执行topic(3)这类内置函数,完成计算后将结果作为Kafka消息的key使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:22:34