如何为在 Cloudformation 中创建的 Lambda 设置 Cloudwatch 日志

How to setup Cloudwatch log for a Lambda created in Cloudformation

在 Cloudformation 中创建 Lambda 函数后,我希望能够在同一个 Cloudformation 脚本中设置 Cloudwatch 日志过期时间。

例如:

MyLambdaRole:
  Type: AWS::Iam::Role
    ...
    Properties:
      ...
      Policies:
        -
          PolicyName: "myPolicy"
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              -
                Effect: "Allow"
                Action:
                  - "logs:CreateLogGroup"
                  - "logs:CreateLogStream"
                  - "logs:PutLogEvents"
                Resource: "arn:aws:logs:*:*:*"

MyLambda:
  Type: AWS::Lambda::Function
  Properties:
    ...
    Role: !GetAtt [ MyLambdaRole, Arn ]

但是,CloudFormation 不允许 modify/update 为 AWS 保留的日志:"Log groups starting with AWS/ are reserved for AWS."

有解决办法吗?由于无法在 Lambda resource creation 中设置日志名称,也许有一些方法可以在我找不到的角色定义中指定它。

使用 AWS 无服务器应用程序模型,负责部署、角色和日志发件箱,您始终可以添加自定义 cloudformation 代码 https://github.com/awslabs/serverless-application-model 他们已经准备好了很多例子。

不,没有。正如您所写,它是 AWS 拥有的一个日志组,您不能为自己授予比 AWS 允许的更多的角色权限。因此,你不能允许自己修改他们的日志组。

试试这个并使用 RetentionInDays 属性更改日志在 time

后过期
LogGroup:
  Type: AWS::Logs::LogGroup
  Properties:
    LogGroupName: !Join ['/', ['/aws/lambda', !Ref MyLambda]]
    RetentionInDays: 7 # days

注意:如果日志组名已经存在(如果MyLambda已经存在就会存在),会出现创建LogGroup失败的问题。解决方法是删除并创建堆栈。