簡體   English   中英

如何阻止 Terraform 刪除導入的資源?

[英]How to block Terraform from deleting an imported resource?

我是 Terraform 的新手,所以我確定我遺漏了一些東西,但我找到的答案似乎並沒有問我同樣的問題。

我有一個 AWS VPC/安全組,我們需要在其下創建我們的 EC2 實例,並且該 VPC/SG 已經創建。 要創建 EC2 實例,Terraform 要求如果我沒有默認 VPC,我必須導入我自己的。 但是一旦我導入並應用我的計划,當我想銷毀它時,它也試圖銷毀我的 VPC。 如何封裝我的資源,以便當我運行“terraform apply”時,我可以使用導入的 VPC 創建一個 EC2 實例,但是當我運行“terraform destroy”時,我只銷毀我的 EC2 實例?

萬一有人想提,我明白:

lifecycle = {
    prevent_destroy = true
}

不是我要找的。

這是我目前的練習代碼。

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 以將 EC2 實例部署到其中。 您應該能夠通過 id 引用 VPC、子網和安全組,以便 TF 了解您現有的網絡基礎設施,就像您已經為 SG 和子網所做的那樣。 部署 EC2 實例“aws_instance”所需要做的就是在現有 VPC 中為其提供現有子網 ID,就像您已經做的那樣。 為什么說 Terraform 需要部署或導入 VPC? 在沒有 VPC 的情況下僅使用現有 VPC 進行部署時,您有什么錯誤或問題?

如果您真的願意,您可以通過 AWS 保護 VPC,但我認為您並不想將 VPC 導入您的 Terraform state 並讓 Z303E96F80576360D0C7B07AE7528FA4B 在這里管理它。 聽起來您希望 VPC 為其他資源提供服務,可能是手動部署的應用程序或通過其他 TF 堆棧,並且 VPC 獨立於任何應用程序部署。

要回答原始問題,您可以使用數據源並通過 id 或標簽名稱匹配您的 VPC:

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

或者

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

然后參考它: data.aws_vpc.main

Also, if you already included your VPC but would like not to destroy it while remove it from your state, you can manage to do it with the terraform state command: https://www.terraform.io/docs/commands/state/索引.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM