我有以下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
}
]
}
我也尝试过将滤镜模式作为文档字符串,不幸的是得到了相同的结果。
感谢任何帮助。我已经使用了发布供应商,但在多帐户设置中,这很痛苦。谢谢。