Terraform创建CloudFormation AnomalySubscription报插值错误如何解决
问题原因
你在CloudFormation模板字符串内直接插值了each.value.NotificationsEmail这个列表类型的复杂结构,Terraform无法自动将嵌套的列表/对象结构转换为符合YAML语法的字符串,因此触发了「需要字符串类型」的插值错误。
解决方案
使用Terraform内置的jsonencode函数对复杂结构进行编码,由于YAML完全兼容JSON语法,编码后的内容可以被CloudFormation正常识别,无需额外调整结构。
修改后的resource.tf配置如下:
resource "aws_cloudformation_stack" "anomaly_detection" { name = "${var.StackName}${each.value.Key}" for_each = { for i in local.anomalies : "${i.Key}" => i } template_body = <<EOF AWSTemplateFormatVersion: "2010-09-09" Description: Cost Anomaly Detection Resources: CostExplorer: Type: AWS::CE::AnomalySubscription Properties: Frequency: DAILY MonitorArnList: [!Ref CostExplorerServiceAnomalyMonitor] Subscribers: ${jsonencode(each.value.NotificationsEmail)} SubscriptionName: DailyAnomalySubscription Threshold: ${jsonencode(each.value.Threshold)} EOF }
这里同时对Threshold也使用了jsonencode,是为了避免数值类型被自动转为字符串导致CloudFormation识别类型错误的额外问题。
内容的提问来源于stack exchange,提问作者HeadinCloud
相关产品推荐
相关产品推荐

