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

Terraform更新Lambda代码发布版本时遇ResourceConflictException错误

问题原因

当你设置publish = true时,Terraform会在更新Lambda函数代码的同一操作中尝试发布新版本,但AWS Lambda的API不允许在函数代码更新过程中立即执行版本发布操作,导致出现ResourceConflictException冲突错误。

解决方案

放弃使用aws_lambda_function的publish参数,改用aws_lambda_function_version资源单独管理版本发布,让Terraform先完成函数代码更新,再执行版本创建操作,避免时序冲突。

修改后的代码示例

data "archive_file" "zip" {
  type        = "zip"
  source_file = "${path.module}/lambda/hello.js"
  output_path = "${path.module}/lambda/hello.zip"
}

resource "aws_lambda_function" "hello_terraform" {
  filename         = data.archive_file.zip.output_path
  source_code_hash = filebase64sha256(data.archive_file.zip.output_path)

  function_name = var.project_name
  role          = aws_iam_role.lambda_role.arn
  handler       = "hello.handler"
  runtime       = "nodejs12.x"
  timeout       = 10
  # 移除publish参数,仅负责函数代码更新
}

# 单独管理Lambda版本,依赖函数更新完成后执行
resource "aws_lambda_function_version" "hello_terraform" {
  function_name     = aws_lambda_function.hello_terraform.function_name
  source_code_hash  = aws_lambda_function.hello_terraform.source_code_hash
}

data "aws_iam_policy_document" "lambda_assume_role_policy" {
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["lambda.amazonaws.com"]
    }
  }
}

resource "aws_iam_role" "lambda_role" {
  name               = "${var.project_name}-lambda-role"
  assume_role_policy = data.aws_iam_policy_document.lambda_assume_role_policy.json
}

额外说明

  • 每次修改Lambda代码后,source_code_hash会变化,触发aws_lambda_function更新,随后aws_lambda_function_version会自动创建新版本。
  • 如果需要配置版本别名,可以添加aws_lambda_alias资源,关联上述版本资源:
    resource "aws_lambda_alias" "hello_terraform_prod" {
      name             = "prod"
      function_name    = aws_lambda_function.hello_terraform.function_name
      function_version = aws_lambda_function_version.hello_terraform.version
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:05:18