如何在Fn :: Sub中正确执行正则表达式

时间:2019-01-03 20:19:18

标签: amazon-web-services amazon-cloudformation

在一个cloudformation模板JSON文件中,我试图使用RegEx为多个LogGroupNames指定一个指标过滤器,如下例所示。

我确实查看了java.util.regex.Pattern文档,AWS说它是它的regex语法的基础,但这没有帮助。

"LogGroupName": {
                "Fn::Sub": "/aws/lambda/${Vpc}-lambdaname\\*"

"Fn::Sub": "/aws/lambda/${Vpc}-lambdaname\\[A-Z0-9]+"

但是我仍然收到此错误消息:...无法满足约束条件:成员必须满足正则表达式模式:[.-_ /#A-Za-z0-9] +(服务:AWSLogs;状态码:400;错误代码:InvalidParameterException ...'

我需要什么合适的正则表达式语法,或者还有另一种方法来指定多个日志组?谢谢。

1 个答案:

答案 0 :(得分:1)

Fn::Sub不执行正则表达式,而您所追求的也不是正则表达式,它是一个通配符,但是在查看AWS::Logs::MetricFilter文档时,我认为它不支持通配符表达式。您需要指定确切的日志组引用,因此必须为每个日志组名称创建一个单独的MetricFilter(如果确实有很多)。也许您的意思是日志组中的所有日志流?在这种情况下,您可以不用后缀/*,因为该过滤器适用于组中的所有流。对于lambda函数,日志组的格式为/aws/lambda/<FunctionName>,因此对于您的情况"Fn::Sub": "/aws/lambda/${Vpc}-lambdaname",您已经完成。

您所说的确切错误是\(反斜杠)不是日志组名称的有效部分。当您说\\*时,它变成\*。您可能是说/*,但如上所述,您并不需要它。

Fn :: Sub: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html

AWS :: Logs :: MetricFilter: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-metricfilter.html