使用Terraform将AWS Lambda日志写入CloudWatch Log组

时间:2020-01-28 13:26:04

标签: amazon-web-services aws-lambda terraform terraform-provider-aws

我正在尝试将lambda函数的日志写入terraform创建的CloudWatch Log Group。

这是lambda策略json-

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid": "Stmt1580216411252",
        "Action": [
          "logs:CreateLogStream",
          "logs:CreateLogDelivery",
          "logs:PutLogEvents"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:logs:*:*:*"
      }
    ]
  }

这是lambda假定策略json-

{
    "Version": "2012-10-17",
    "Statement": [{
        "Action": "sts:AssumeRole",
        "Principal": {
            "Service": "lambda.amazonaws.com"
        },
        "Effect": "Allow",
        "Sid": ""
    }]
}

我已将此添加到lambda.tf文件-

resource "aws_cloudwatch_log_group" "example" {
  name              = "/test/logs/${var.lambda_function_name}"
}

尽管通过terraform创建了CloudWatch Log Group'/test/logs/${var.lambda_function_name}',但我无法将lambda函数的日志写入该组。

如果我将lambda策略json更改为此-

{
    "Version": "2012-10-17",
    "Statement": [{
        "Sid": "Stmt1580204738067",
        "Action": "logs:*",
        "Effect": "Allow",
        "Resource": "*"
    }]
}

然后它将自动将日志存储在/ aws / lambda /目录中。

如何确保将lambda日志写入我创建的CloudWatch Log组中,而不写入lambda本身创建的/ aws / lambda /组中?

1 个答案:

答案 0 :(得分:1)

如果要Terraform管理CloudWatch日志组,则必须提前创建Lambda函数将用于其日志组的确切名称的日志组。您根本无法更改名称。然后,在Terraform中,需要使日志组成为Lambda函数的依赖项,以确保Terraform在Lambda自动创建日志组之前有机会创建日志组。