Terrafrom AWS EC2 без изменений в коде, пытается уничтожить и создать экземпляр

#terraform #terraform-provider-aws

Вопрос:

Я использовал приведенный ниже код terrafrom для создания экземпляра AWS EC2,

 resource "aws_instance" "example" {
  ami             = var.ami-id
  instance_type   = var.ec2_type
  key_name        = var.keyname
  subnet_id       = "subnet-05a63e5c1a6bcb7ac"
  security_groups = ["sg-082d39ed218fc0f2e"]

  # root disk
  root_block_device {
    volume_size           = "10"
    volume_type           = "gp3"
    encrypted             = true
    delete_on_termination = true
  }

  tags = {
    Name        = var.instance_name
    Environment = "dev"
  }

  metadata_options {
    http_endpoint               = "enabled"
    http_put_response_hop_limit = 1
    http_tokens                 = "required"
  }

}
 

через 5 минут без изменений в коде, когда я пытаюсь запустить terraform plan . Это показывает, что что-то изменилось за пределами Terraform, его попытка уничтожить и воссоздать экземпляр Ec2. Почему это происходит?

Как это предотвратить?

 aws_instance.example: Refreshing state... [id=i-0aa279957d1287100]

Note: Objects have changed outside of Terraform

Terraform detected the following changes made outside of Terraform since the last "terraform apply":

  # aws_instance.example has been changed
  ~ resource "aws_instance" "example" {
        id                                   = "i-0aa279957d1287100"
      ~ security_groups                      = [
          - "sg-082d39ed218fc0f2e",
        ]
        tags                                 = {
            "Environment" = "dev"
            "Name"        = "ec2linux"
        }
        # (26 unchanged attributes hidden)





      ~ root_block_device {
            tags                  = {}
            # (9 unchanged attributes hidden)
        }
        # (4 unchanged blocks hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may include actions to undo or respond to these
changes.

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
-/  destroy and then create replacement
 

добавление изображения:
введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Я не вижу ничего, что требовало бы замены. Вы уверены, что это вынужденная замена?

2. @Marcin добавил снимок экрана, да, он пытается удалить и создать новый instnace.

Ответ №1:

Вы должны использовать vpc_security_group_ids вместо security_groups

 resource "aws_instance" "example" {
  ami             = var.ami-id
  instance_type   = var.ec2_type
  key_name        = var.keyname
  subnet_id       = "subnet-05a63e5c1a6bcb7ac"
  vpc_security_group_ids = ["sg-082d39ed218fc0f2e"]

  # root disk
  root_block_device {
    volume_size           = "10"
    volume_type           = "gp3"
    encrypted             = true
    delete_on_termination = true
  }

  tags = {
    Name        = var.instance_name
    Environment = "dev"
  }

  metadata_options {
    http_endpoint               = "enabled"
    http_put_response_hop_limit = 1
    http_tokens                 = "required"
  }

}