Terraform 无法删除 lambda ENI 的安全组

Ada*_*dam 7 terraform terraform-provider-aws

我有一个 terraform 脚本,可以在 VPC 中创建 lambda 函数。由于 lambda 部署到 VPC,因此它会创建一个 ENI 并将其与我的安全组关联。但是,当我去更改该安全组(destroy)时,由于正在使用的 ENI 超时而失败。

我假设发生的情况是,Terraform 认识到 ENI 依赖于安全组,但没有认识到 lambda 函数依赖于 ENI,因此在尝试删除 ENI 之前不会尝试删除 lambda 函数。

期望的结果是能够更改安全组的名称和描述,而无需手动删除 lambda 函数和 ENI。

我尝试过创建各种“ depends_on ”,并设置 lambda 函数的生命周期,以便在安全组发生更改时销毁,但都不起作用。我正在使用 Terraform 版本 1.3.3 和 AWS 提供商版本 4.37.0。

错误:使用安全组 (sg-01ba40a4b03c5ddd2) 删除 ENI:发生 2 个错误:

等待 Lambda ENI (eni-02cd7771540d50f8e) 可用于分离:等待状态变为“可用”时超时(最后状态:“使用中”,超时:45m0s)

等待 Lambda ENI (eni-030c34234a51be116) 可用于分离:等待状态变为“可用”时超时(最后状态:“使用中”,超时:45m0s)

# ----------------------------------------------------------------------
# Security group
# ----------------------------------------------------------------------
resource "aws_security_group" "public" {
  name        = "test-sg"
  vpc_id      = var.vpc_id
  description = "Security group for the lambda functions." # I cant modify this
}


# ----------------------------------------------------------------------
# Lambda Function
# ----------------------------------------------------------------------
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]
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢。

小智 0

在我们遇到类似问题后,一项对我们的组织有所帮助的发现是,较旧的 Lambda 版本可能包含对您希望删除的安全组(以及相应的 ENI)的引用。

为了解决这个问题,我们必须先删除引用该安全组值的所有 Lambda 版本,然后才能删除该安全组。