在编写cloudwatch订阅过滤器模式时无法逃脱terraform中的引号

时间:2017-09-26 01:03:27

标签: escaping terraform

我有以下terraform资源声明:

# Log subscription to lambda
resource "aws_cloudwatch_log_subscription_filter" "subscription" {
  provider = "aws.west"
  name            = "root-monitor"
  log_group_name  = "${aws_cloudwatch_log_group.log-group.name}"
  filter_pattern  = "{ $.userIdentity.type = \"Root\" && ( $.eventType = \"AwsConsoleSignIn\" || ( $.eventType = \"AwsApiCall\" && $.userIdentity.accessKeyId = \"*\" )) }"
  destination_arn = "${aws_lambda_function.lambda.arn}"
}

请注意,表达式必须包含双引号。 terraform也必须用双引号括起来,所以我试着用反斜杠转义。 (也就是说,过滤器表达式和terraform都不接受单引号作为替代)。

这被接受并成功推送到aws,但结果模式包含反斜杠:

$ aws logs describe-subscription-filters --log-group-name cloudtrail-root-monitor
{
    "subscriptionFilters": [
        {
            "filterName": "root-monitor",
            "logGroupName": "cloudtrail-root-monitor",
            "filterPattern": "{ $.userIdentity.type = \"Root\" && ( 
$.eventType = \"AwsConsoleSignIn\" || ( $.eventType = \"AwsApiCall\" && $.userIdentity.accessKeyId = \"*\" ))}",
            "destinationArn": "arn:aws:lambda:us-west-2:xxxxxxxxxxxx:function:root-alarm-processor",
            "distribution": "ByLogStream",
            "creationTime": 1506386842242
        }
    ]
}

我也尝试过将滤镜模式作为文档字符串,不幸的是得到了相同的结果。

感谢任何帮助。我已经使用了发布供应商,但在多帐户设置中,这很痛苦。谢谢。

0 个答案:

没有答案