【问题标题】:How to block Terraform from deleting an imported resource?如何阻止 Terraform 删除导入的资源?
【发布时间】:2020-02-03 00:34:25
【问题描述】:

我是 Terraform 的新手,所以我确定我遗漏了一些东西,但我找到的答案似乎与我提出的问题不同。

我有一个 AWS VPC/安全组,我们需要在该组下创建我们的 EC2 实例,并且该 VPC/SG 已经创建。要创建 EC2 实例,Terraform 要求如果我没有默认 VPC,我必须导入我自己的。但是一旦我导入并应用我的计划,当我想销毁它时,它也试图销毁我的 VPC。如何封装我的资源,以便当我运行“terraform apply”时,我可以使用我导入的 VPC 创建一个 EC2 实例,但当我运行“terraform destroy”时,我只销毁我的 EC2 实例?

如果有人想提及,我明白:

lifecycle = {
    prevent_destroy = true
}

不是我要找的。​​p>

这是我目前的练习代码。

resource "aws_vpc" "my_vpc" {
  cidr_block = "xx.xx.xx.xx/24"
}

provider "aws" {
  region = "us-west-2"
}


data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*"]
  }

  owners = ["099720109477"] # Canonical
}


resource "aws_instance" "web" {

  ami           = "${data.aws_ami.ubuntu.id}"
  instance_type = "t3.nano"

  vpc_security_group_ids = ["sg-0e27d851dxxxxxxxxxx"]
  subnet_id              = "subnet-0755c2exxxxxxxx"

  tags = {
    Name = "HelloWorld"
  }
}

【问题讨论】:

  • 听起来您真正想要的是让您的 Terraform 配置了解 VPC,但不主动管理它。那是对的吗?否则,我假设您要管理 VPC,但要防止它被破坏。
  • 正确你的第一个假设。我想将我的 EC2 实例放入我的非默认预制 VPC,但不让 Terraform 管理此 VPC。

标签: amazon-web-services amazon-ec2 terraform amazon-vpc


【解决方案1】:

Terraform 不应要求您部署或导入 VPC 才能将 EC2 实例部署到其中。您应该能够通过 id 引用 VPC、子网和安全组,以便 TF 了解您现有的网络基础设施,就像您已经为 SG 和子网所做的那样。部署 EC2 实例“aws_instance”所需要做的就是在现有 VPC 中为其提供现有子网 ID,就像您已经做的那样。为什么说 Terraform 需要部署或导入 VPC?您在不使用 VPC 并仅使用现有 VPC 的情况下进行部署时遇到了什么错误或问题?

如果你真的想的话,你可以通过 AWS 保护 VPC,但我不认为你真的想将 VPC 导入到你的 Terraform 状态并让 Terraform 在这里管理它。听起来您希望 VPC 为其他资源提供服务,可能是手动部署的应用程序或通过其他 TF 堆栈,并且 VPC 独立于任何应用程序部署。

【讨论】:

  • 我删除了导入的 VPC,它仍然有效。看起来我收到的错误(错误 400 没有默认 VPC)是因为我没有包含 vpc_security_group_ids 和 subnet_id。我只在导入 VPC 时测试后才添加它们。我一直都有解决方案。谢谢!
【解决方案2】:

要回答原始问题,您可以使用数据源并通过 id 或标签名称匹配您的 VPC:

data "aws_vpc" "main" {
  tags = {
    Name = "main_vpc"
  }
}

或者

data "aws_vpc" "main" {
  id = "vpc-nnnnnnnn"
}

然后参考它:data.aws_vpc.main

另外,如果您已经包含了您的 VPC,但不想在将其从您的状态中删除时将其销毁,您可以使用terraform state 命令:https://www.terraform.io/docs/commands/state/index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-23
    • 2019-06-25
    • 2022-01-15
    • 2019-03-16
    • 2020-01-23
    • 2020-08-01
    • 2019-03-27
    • 2020-04-29
    相关资源
    最近更新 更多