如何销毁Terraform管理的默认安全组中的规则?

如何销毁Terraform管理的默认安全组中的规则?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,当Terraform采用专有网络中默认安全组的所有权时,它将删除所有当前规则并添加default\u security\u group资源中指定的任何规则。但是,当您“销毁”资源时,它不会删除添加到默认安全组中的规则。我知道它不会删除默认的安全组,但我希望它会删除它添加的规则。有没有直接的方法删除这些规则 我目前的解决方法是使用一个单独的模块,其中包含一个空的default\u security\u group资源。我在运行destroy之前构建了它,该构建删除了规则。有更好的办法吗?你说的“采

当Terraform采用专有网络中默认安全组的所有权时,它将删除所有当前规则并添加
default\u security\u group
资源中指定的任何规则。但是,当您“销毁”资源时,它不会删除添加到默认安全组中的规则。我知道它不会删除默认的安全组,但我希望它会删除它添加的规则。有没有直接的方法删除这些规则

我目前的解决方法是使用一个单独的模块,其中包含一个空的
default\u security\u group
资源。我在运行destroy之前构建了它,该构建删除了规则。有更好的办法吗?

你说的“采用所有权”是什么意思?是否将默认安全组导入状态文件

如果是,您可能应该使用而不是资源来处理默认安全组:

data "aws_security_group" "default" {
  name = "default"
}

您可以使用
“${data.aws\u security\u group.default.vpc\u ID}”获取默认安全组的ID
。现在只需添加规则,这些规则可以在不接触安全组本身的情况下销毁。

文档当前没有说明这一点,但您可以使用以下方法导入默认安全组:

terraform导入aws\u default\u security\u group.sg-
我在将资源从一个解决方案移动到另一个解决方案时发现了这一点,并忘记使用
terraformstate rm
从初始代码库中删除资源:)


然后,您应该能够像往常一样编辑资源。

感谢您的回复!查看aws默认安全组上的文档。相关的句子是“aws_默认_安全性_组的行为不同于正常资源,因为Terraform不创建此资源,而是将其“采用”到管理中。此外,您不能将外部
aws_安全性_组规则
资源与
aws_默认_安全性_组
一起使用,这将阻止您描述的解决方案正常工作(假设我理解您所说的“只需添加规则”的意思)。我现在不知道该资源。。。这似乎是预期的行为,在使用数据源时不会删除规则()(请参见我的答案)。您应该能够在terraform配置中创建和删除规则,除非我遗漏了什么,这不是对我问题的回答,因为它涉及不使用
aws\u default\u security\u组
资源本身。但这似乎是对相关问题的一个很好的回答,“如何在不使用
aws\u default\u security\u group
的情况下向默认安全组添加和删除规则”,我认为这对其他人很有用。如果你真的必须使用
aws\u default\u security\u group
,您可以使用
localexec
添加
provisioner
,并在资源被破坏时使用AWS CLI/API执行一些“魔术”来获取内联规则并删除它们。是的,这也是一个很好的解决方法。实际上,我决定使用一个条件变量和一个空的
aws\u default\u security\u group
来解决这个问题。在销毁之前,我将该资源作为目标,并设置条件变量,以便构建空资源。这将删除规则。这样,我就可以在Terraform中工作(我试图避免使用CLI、Boto或类似的工具),并且不需要单独的模块。