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

Amazon web services 如何在Fn::Sub中正确执行正则表达式,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,在cloudformation模板JSON文件中,我尝试使用正则表达式为多个LogGroupName指定metricfilter,如下示例所示 我确实看过java.util.regex.Pattern文档,AWS说这是它的正则表达式语法的基础,但这没有帮助 "LogGroupName": { "Fn::Sub": "/aws/lambda/${Vpc}-lambdaname\\*" 或 但我继续收到此错误消息:…'未能满足约束:成员必须满足正则表达式模式:[.-

在cloudformation模板JSON文件中,我尝试使用正则表达式为多个LogGroupName指定metricfilter,如下示例所示

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

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

但我继续收到此错误消息:…'未能满足约束:成员必须满足正则表达式模式:[.-.-./#A-Za-z0-9]+(服务:AWSLogs;状态代码:400;错误代码:InvalidParameterException…'


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

Fn::Sub
不做正则表达式,您要的也不是正则表达式,它是通配符,但看看
AWS::Logs::MetricFilter
文档,我认为它不支持wildcard表达式。您需要指定精确的日志组引用,因此必须为每个日志组名称创建单独的
MetricFilter
(如果确实有许多日志组名称)。可能您的意思是日志组中的所有日志流?在这种情况下,您可以不使用
/*
后缀,因为过滤器适用于组中的所有流。对于lambda函数,日志组的形式为
/aws/lambda/
,因此在您的情况下
“Fn::Sub”:/aws/lambda/${Vpc}-lambdaname”
,您就完成了

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

Fn::Sub:

AWS::Logs::MetricFilter:

谢谢jbasko。我正在尝试为每个以特定字符串开始的日志组设置度量,而不是logstream。我们有几个部署,并且创建了新的日志组,所以我希望只指定一个正则表达式是一个简单的解决方案。是的,然后每个日志组都需要一个单独的
MetricFilter
。我要做的是在我的位置旁边定义它定义每个
LogGroup
(对我个人来说,它紧挨着每个
Lambda::Function
;这不是必需的,但我这样做是因为这样我就可以控制日志过期;不幸的是,在CloudFormation的监视之外创建日志组之后,您就不能这样做了)如果您不希望在所有位置更新某些模式,我会使用一个参数,该参数的值可以从SSM参数存储中查找。我试图避免创建单独的MetricFilter,因为在部署后会不断创建新的日志组,并且日志组名是使用动态id生成的(我不知道如何在我的cloudformation模板中捕获)在名称的末尾。例如:'/aws/lambda/-fvu22ivjvgp如果您为lambda指定
FunctionName
,则它们不会有随机名称。如果您自己创建日志组,则您可以控制它。您可以使用!Ref引用生成的lambda名称。这是我的典型日志组:LogGroup:Type:aws::Logs::LogGroup Properties:LogGroupName:!Sub/aws/lambda/${Function}保留天数:30谢谢jbasko。我继续为每一个设置metricfilter。
"Fn::Sub": "/aws/lambda/${Vpc}-lambdaname\\[A-Z0-9]+"