Как заблокировать Terraform от удаления импортированного ресурса? - PullRequest
1 голос
/ 04 октября 2019

Я новичок в Terraform, поэтому я уверен, что что-то упустил, но ответы, которые я нахожу, похоже, не задают тот же вопрос, что и у меня.

У меня естьAWS VPC / Security Group, под которой нам нужно создать наши экземпляры EC2, и этот VPC / SG уже создан. Чтобы создать экземпляр EC2, Terraform требует, чтобы, если у меня нет VPC по умолчанию, я импортировал свой собственный. Но как только я импортирую и применяю свой план, когда я хочу уничтожить его, он также пытается уничтожить мой VPC. Как мне инкапсулировать мои ресурсы, чтобы при запуске «terraform apply» я мог создать экземпляр EC2 с моим импортированным VPC, но когда я запускаю «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"
  }
}

1 Ответ

0 голосов
/ 04 октября 2019

Terraform не должен требовать от вас развертывания или импорта VPC для развертывания в нем экземпляра EC2. Вы должны иметь возможность ссылаться на VPC, подсети и группы безопасности по идентификатору, чтобы TF знал о вашей существующей сетевой инфраструктуре так же, как вы уже сделали для SG и подсетей. Все, что вам нужно для развертывания экземпляра EC2 «aws_instance», - это присвоить ему существующий идентификатор подсети в существующем VPC, как вы уже сделали. Почему вы говорите, что Terraform требует развертывания или импорта VPC? Какую ошибку или проблему вы развертываете без VPC и просто используете существующий?

Вы можете защитить VPC через AWS, если вы действительно этого хотите, но я не думаю, что вы действительно хотите импортировать VPCв ваше состояние Terraform, и пусть Terraform управляет этим здесь. Похоже, вы хотите, чтобы VPC обслуживал другие ресурсы, возможно, приложения, развернутые вручную или с помощью других стеков TF, и VPC, чтобы жить независимо от развертывания любого приложения.

...