You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS CloudFormation使Lambda日志同时输出至自定义与原日志组

实现Lambda日志同时输出至默认日志组与自定义日志组的CloudFormation配置

Lambda默认会将执行日志写入自带的日志组(格式为/aws/lambda/[函数名]),要实现日志同时输出到自定义日志组,最直接的方式是给默认日志组添加CloudWatch订阅过滤器,将日志实时转发到自定义日志组。以下是修改后的完整CloudFormation模板:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  # 自定义日志组 - 用于接收Lambda日志副本
  CustomLambdaLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: /aws/lambda/custom-test-log-group
      RetentionInDays: 30 # 可根据需求调整日志保留天数

  # Lambda函数(基于原模板修改)
  test:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: test-function # 显式指定函数名,方便关联默认日志组
      Role: !GetAtt LambdaExecutionRole.Arn # 若使用原有角色ARN,需确保其具备对应权限
      Handler: test.lambda_handler
      Runtime: python3.8
      CodeUri: test.py
      MemorySize: 128
      Timeout: 200
      Layers:
        - !Ref TestLayer1 # 原模板的!Ref test存在命名冲突,建议重命名层逻辑ID
        - !Ref TestLayer2
      Events:
        NonGithubAPIs:
          Type: Api
          Properties:
            Path: /test/get
            Method: get
            RestApiId: !Ref TestRestApi # 同理,重命名API逻辑ID避免冲突

  # Lambda执行角色(若原有角色无自定义日志组写入权限,可在此定义)
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # 包含默认日志组基础权限
      Policies:
        - PolicyName: CustomLogGroupAccess
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - logs:PutLogEvents
                  - logs:CreateLogStream
                Resource: !GetAtt CustomLambdaLogGroup.Arn

  # 订阅过滤器:将默认日志组日志转发到自定义日志组
  LambdaLogSubscriptionFilter:
    Type: AWS::Logs::SubscriptionFilter
    Properties:
      LogGroupName: !Sub /aws/lambda/${test} # 动态关联Lambda默认日志组
      FilterPattern: "" # 空规则表示转发所有日志
      DestinationArn: !GetAtt CustomLambdaLogGroup.Arn

关键配置说明:

  • 自定义日志组:通过AWS::Logs::LogGroup创建专属日志组,可自定义名称和保留周期。
  • 权限控制:Lambda角色必须拥有向自定义日志组写入日志的权限(logs:PutLogEvents、logs:CreateLogStream),若使用原有角色,需手动为其添加对应权限策略。
  • 订阅过滤器:AWS::Logs::SubscriptionFilter是实现日志复制的核心,通过关联默认日志组和自定义日志组,实现实时日志转发。
  • 命名规范:原模板中多个资源使用test作为逻辑ID会导致冲突,建议为层、API等资源设置唯一逻辑ID。

内容的提问来源于stack exchange,提问作者Ishaan Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 00:39:56