Terraform cloudwatch 保留逻辑

JBe*_*rto 5 lambda terraform serverless

我正在尝试向我的 terraform 脚本添加逻辑,以便在创建 lambda 时添加 CW 保留逻辑,以便我们的日志在 30 天后清除。我看到的是,当运行 terraform 来更新现有的 lambda(在添加新的保留逻辑之前部署的)时,我的工作失败并出现以下错误。

  • aws_cloudwatch_log_group.lambda-deploy:发生 1 个错误:

  • aws_cloudwatch_log_group.lambda-deploy:创建 CloudWatch 日志组失败:ResourceAlreadyExistsException:指定的日志组已存在状态代码:400,请求 ID:e500eb50-4a81-11e9-9c08-7152b4a0ad31:CloudWatch 日志组'/aws/lambda/{lambda -name}'已经存在。

以下是我设置 terraform 代码的方式:

resource "aws_lambda_function" "lambda-deploy" {
  filename      = "${var.filename}"
  function_name = "${var.functionname}"
  role          = "${var.role}"
  handler       = "${var.handler}"
  runtime       = "${var.runtime}"
  publish       = "${var.publish}"
  memory_size   = "${var.memory_size}"
  timeout       = "${var.timeout}"
  description   = "${var.description}"

  layers = "${var.layers}"

  environment {
    variables = "${var.envVars}"
  }

  tags {
    PLATFORM        = "${var.tag_PLATFORM}"
    BUSINESS_UNIT   = "${var.tag_BUSINESS_UNIT}"
    CLIENT          = "${var.tag_CLIENT}"
    BUSINESS_REGION = "${var.tag_BUSINESS_REGION}"
  }

  vpc_config {
    subnet_ids         = "${var.subnet_ids}"
    security_group_ids = "${var.security_group_ids}"
  }
}

#Below logic will add cloud watch retention logic so logs rotate after 30 days.
resource "aws_cloudwatch_log_group" "lambda-deploy" {
  name              = "/aws/lambda/${aws_lambda_function.lambda-deploy.function_name}"
  retention_in_days = "30"
}
Run Code Online (Sandbox Code Playgroud)

我的问题是, aws_cloudwatch_log_group资源是否可以检查是否已创建 cloudwatch 组并仅更新保留策略而不是尝试创建日志组?

BMW*_*BMW 0

由于您没有向我们展示 lambda 函数的 iam 角色策略,我不得不猜测。

我的感觉是 lambda 的 iam 角色和策略具有权限logs:CreateLogGroup。所以 lambda 函数会处理creating log group if not exist.

当您更新时,该日志组不受 terraform 管理,它会报告该问题。

您能否删除权限logs:CreateLogGroup并删除日志组,然后重试?