【问题标题】:How to properly do regex expression in Fn::Sub如何在 Fn::Sub 中正确执行正则表达式
【发布时间】:2019-01-04 23:54:45
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案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

    【讨论】:

    • 感谢 jbasko。我正在尝试为每个以特定字符串而不是 logstream 开头的日志组设置指标。我们有几个部署并创建了新的日志组,所以我希望只指定一个正则表达式是一个简单的解决方案。
    • 是的,那么您需要为每个单独的MetricFilter。我要做的是在我定义每个LogGroup 的位置旁边定义它(对我个人而言,它位于每个Lambda::Function 旁边;这不是必需的,但我这样做是因为我可以控制日志过期;不幸的是你可以' t 在 CloudFormation 的监视之外创建日志组之后执行此操作)并且如果您不想在所有地方更新某些模式,我将使用从 SSM 查找值的参数参数存储。
    • 我试图避免创建单独的 MetricFilter,因为在部署后会不断创建新的日志组,并且日志组名称是使用动态 id 生成的(我不知道如何在我的 cloudformation 中捕获模板)在名称的末尾。示例:'/aws/lambda/-FVU22IVJVGP
    • 如果您为您的 lambda 指定 FunctionName,那么它们将不会有随机名称。如果您自己创建 LogGroup,那么您就可以控制它。您可以使用 !Ref 引用生成的 lambda 名称。这是我的典型日志组: LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub /aws/lambda/${Function} RetentionInDays: 30
    • 感谢 jbasko。我继续为每个指标过滤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2021-12-09
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多