Скрипт Terraform, уничтожающий ранее созданный ec2 перед созданием нового - PullRequest
0 голосов
/ 05 октября 2019

Я новичок в Terraform, и это мой первый скрипт, пробующий его

provider "aws" {
  profile    = "default"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}

У меня есть скрипт выше, сохраненный на моем рабочем столе Windows в C:\TerraformScripts\First.tf

Теперь, когда я запускаюВ первый раз скрипт выполняется и создает для меня новый экземпляр. Я хотел запустить его во второй раз, просто изменив имя с example на example2. Я предполагал, что это создаст новый экземпляр с той же конфигурацией, так как я изменил имя в соответствии с настройкой ресурса. Но вместо этого он уничтожил экземпляр, который я создал при первом запуске, а затем снова создал его. Почему это происходит без указания моего уничтожения?

Извинения, если я что-то упустил в документации, но я не смог увидеть это, когда посмотрел.

Спасибо.

1 Ответ

1 голос
/ 05 октября 2019

Terraform является декларативным языком, что означает, что сценарий, который вы пишете, сообщает terraform состояние, в которое вы хотите попасть (тогда terraform решает, как туда добраться). Это все равно, что сказать «Я хочу, чтобы вы удостоверились, что у меня есть aws_instance», а не «Я хочу, чтобы вы создали aws_instance».

Если я правильно понимаю, вы, вероятно, стремитесь сделать это:

provider "aws" {
  profile    = "default"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}

resource "aws_instance" "example2" {
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}

Если вы запустите terraform apply сейчас, у вас будет два экземпляра EC2 независимо от того, сколько было создано сценарием ранее . Это связано с тем, что terraform отслеживает ресурсы, созданные ранее для этого сценария в файле состояния, сравнивает их с текущим сценарием, а затем определяет, какие действия необходимо предпринять, чтобы выстроить их в линию.

В качестве альтернативы,Вы можете использовать параметр count для получения нескольких копий одного и того же ресурса:

provider "aws" {
  profile    = "default"
  region     = "us-east-1"
}

resource "aws_instance" "example" {
  count         = 2
  ami           = "ami-2757f631"
  instance_type = "t2.micro"
}
...