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

Terraform无法删除Lambda ENI关联安全组,变更时超时失败

解决VPC内Terraform修改Lambda关联安全组时的ENI占用超时问题

问题根源

修改安全组的name或description时,Terraform会尝试销毁旧安全组并创建新实例,但由于Lambda仍在使用旧安全组关联的ENI,ENI处于in-use状态导致安全组删除超时。默认情况下,Terraform未识别到安全组的这类属性变更需要先重建Lambda,因此无法自动处理依赖销毁顺序。

解决方案

利用Terraform的资源替换触发机制,让Lambda在安全组名称/描述变更时自动重建,释放关联ENI,确保旧安全组能顺利删除。以下是两种可行方案:

方案1:使用Lambda的triggers字段

通过在Lambda资源中添加triggers字段,将安全组的name和description作为触发条件。当这两个属性变更时,Terraform会自动销毁旧Lambda并创建新实例:

resource "aws_lambda_function" "lambda_function" {
  function_name    = var.name
  handler          = var.handler
  description      = var.description
  runtime          = var.runtime
  package_type     = "Zip"
  filename         = var.file_path
  source_code_hash = filebase64sha256(var.file_path)
  role             = aws_iam_role.lambda_execution_role.arn
  timeout          = 30
  memory_size      = var.memory_size

  # 安全组名称/描述变更时触发Lambda重建
  triggers = {
    sg_name        = aws_security_group.public.name
    sg_description = aws_security_group.public.description
  }

  vpc_config {
    subnet_ids         = var.subnet_ids
    security_group_ids = [aws_security_group.public.id]
  }
}

方案2:使用replace_triggered_by生命周期规则(推荐)

Terraform 1.3+支持replace_triggered_by生命周期参数,可直接指定触发Lambda替换的资源属性,无需修改Lambda业务配置:

resource "aws_lambda_function" "lambda_function" {
  function_name    = var.name
  handler          = var.handler
  description      = var.description
  runtime          = var.runtime
  package_type     = "Zip"
  filename         = var.file_path
  source_code_hash = filebase64sha256(var.file_path)
  role             = aws_iam_role.lambda_execution_role.arn
  timeout          = 30
  memory_size      = var.memory_size

  vpc_config {
    subnet_ids         = var.subnet_ids
    security_group_ids = [aws_security_group.public.id]
  }

  # 当安全组名称/描述变更时,替换Lambda实例
  lifecycle {
    replace_triggered_by = [
      aws_security_group.public.name,
      aws_security_group.public.description
    ]
  }
}

原理说明

当修改安全组的name或description时:

  1. Terraform标记旧安全组需要销毁,新安全组需要创建。
  2. 触发机制会先销毁Lambda实例,AWS自动释放关联的ENI。
  3. 旧安全组无依赖资源后,顺利完成销毁。
  4. Terraform创建新安全组,再创建关联新安全组的Lambda实例,全程自动执行。

注意事项

  • Lambda重建会触发冷启动,若有业务依赖需提前评估。
  • 确保Lambda的所有配置(环境变量、层、角色等)均通过Terraform管理,重建后配置可完整恢复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:15:50