首页 > 解决方案 > 如何在 Fn::Sub 中正确执行正则表达式

问题描述

在 cloudformation 模板 JSON 文件中,我尝试使用 RegEx 为多个 LogGroupNames 指定一个 metricfilter,如下面的示例。

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

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

或者

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

但我继续收到此错误消息: ...'failed to meet constraint: Member must meet regular expression pattern: [.-_/#A-Za-z0-9]+ (Service: AWSLogs; Status Code: 400;错误代码:InvalidParameterException...'

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

标签: amazon-web-servicesamazon-cloudformation

解决方案


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


推荐阅读