使用 Terraform 将 AWS Lambda 日志写入 CloudWatch 日志组
Posted
技术标签:
【中文标题】使用 Terraform 将 AWS Lambda 日志写入 CloudWatch 日志组【英文标题】:Write AWS Lambda Logs to CloudWatch Log Group with Terraform 【发布时间】:2020-05-13 22:20:29 【问题描述】:我正在尝试将 lambda 函数的日志写入 terraform 创建的 CloudWatch 日志组。
这是 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"
虽然 CloudWatch 日志组“/test/logs/$var.lambda_function_name”是通过 terraform 创建的,但我无法将 lambda 函数的日志写入该组。
如果我将 lambda 策略 json 更改为此 -
"Version": "2012-10-17",
"Statement": [
"Sid": "Stmt1580204738067",
"Action": "logs:*",
"Effect": "Allow",
"Resource": "*"
]
然后它会自动将日志存储在 /aws/lambda/ 目录中。
如何确保将 lambda 日志写入我创建的 CloudWatch 日志组,而不是写入 lambda 本身创建的 /aws/lambda/ 组?
【问题讨论】:
您无法为 Lambda 函数配置日志组名称。您可能想阅读docs.aws.amazon.com/lambda/latest/dg/… 和terraform.io/docs/providers/aws/r/… 【参考方案1】:如果您希望 Terraform 管理 CloudWatch 日志组,您必须提前使用 Lambda 函数将用于其日志组的确切名称创建日志组。您根本无法更改名称。然后在您的 Terraform 中,您需要使日志组成为 Lambda 函数的依赖项,以确保 Terraform 有机会在 Lambda 自动创建日志组之前创建它。
【讨论】:
以上是关于使用 Terraform 将 AWS Lambda 日志写入 CloudWatch 日志组的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AWS Lambda 脚本通过 Terraform 部署 AWS 基础设施
schedult 上的 aws 自定义事件以触发 lambda 使用 Terraform
使用 terraform 创建 lambda 函数时出错获取验证错误