Terraform中aws_cloudwatch_event_rule的event_pattern传列表变量报错
Terraform列表类型变量传入aws_cloudwatch_event_rule的event_pattern配置解决方案
报错原因
使用HEREDOC字符串模板直接嵌入列表类型变量时,Terraform无法自动将列表类型转换为符合JSON语法的字符串片段,因此抛出「需要字符串类型」的报错。
解决方案
直接使用Terraform内置的jsonencode函数生成整个event_pattern配置,不需要手动拼接JSON字符串,该函数会自动将Terraform原生数据结构转换为合法的JSON格式,天然支持列表、布尔、数字等多种类型变量的传入。
模块内配置修改示例
将原来的HEREDOC格式的event_pattern替换为以下配置即可:
resource "aws_cloudwatch_event_rule" "somename" { # 其余原有配置保持不变 event_pattern = jsonencode({ source = [ "aws.config" ], "detail-type" = [ "Config Configuration Item Change" ], detail = { messageType = [ "ConfigurationItemChangeNotification" ], configurationItem = { resourceType = var.resource_type, configurationItemStatus = [ "ResourceDiscovered" ], configuration = { instanceType = var.instance_type_list } } } }) }
方案优势
- 无需手动处理JSON语法的引号、逗号、转义等问题,
jsonencode会自动生成合法JSON,避免语法错误 - 直接兼容Terraform所有原生数据类型的变量传入,无需额外做类型转换
- 配置结构可读性更高,变量引用逻辑清晰,后续维护成本低
未封装模块时可正常运行,是因为直接把列表值硬编码在JSON片段中,没有触发变量的类型转换逻辑,因此不会报错。
内容的提问来源于stack exchange,提问作者Vijay Vasudevbhai Gurunanee
相关产品推荐
相关产品推荐

