Terraform: инфраструктура на уровне кода | страница 48



Рис. 2.7. Граф зависимостей для сервера EC2 и его группы безопасности

Выполнив команду apply, вы увидите, что Terraform хочет создать группу безопасности и заменить имеющийся сервер EC2 другим — с новыми пользовательскими данными:

$ terraform apply

(...)

Terraform will perform the following actions:

  # aws_instance.example must be replaced

-/+ resource "aws_instance" "example" {

        ami                          = "ami-0c55b159cbfafe1f0"

      ~ availability_zone            = "us-east-2c" -> (known after apply)

      ~ instance_state               = "running" -> (known after apply)

        instance_type                = "t2.micro"

        (...)

      + user_data                    = "c765373..." # forces replacement

      ~ volume_tags                  = {} -> (known after apply)

      ~ vpc_security_group_ids       = [

          - "sg-871fa9ec",

        ] -> (known after apply)

        (...)

  }

# aws_security_group.instance will be created

+ resource "aws_security_group" "instance" {

    + arn                    = (known after apply)

    + description            = "Managed by Terraform"

    + egress                 = (known after apply)

    + id                     = (known after apply)

    + ingress                = [

        + {

            + cidr_blocks      = [

                + "0.0.0.0/0",

              ]

            + description      = ""

            + from_port        = 8080

            + ipv6_cidr_blocks = []

            + prefix_list_ids  = []

            + protocol         = "tcp"

            + security_groups  = []

            + self             = false

            + to_port          = 8080

          },

        ]

      + name                   = "terraform-example-instance"

      + owner_id               = (known after apply)

      + revoke_rules_on_delete = false

      + vpc_id                 = (known after apply)

    }

Plan: 2 to add, 0 to change, 1 to destroy.

Do you want to perform these actions?

  Terraform will perform the actions described above.

  Only 'yes' will be accepted to approve.

Enter a value:

Символы -/+ в выводе плана означают «заменить». Чтобы понять, чем продиктовано то или иное изменение, поищите в выводе плана словосочетание forces replacement. Изменение многих аргументов ресурса aws_instance приводит к замене. Это означает, что имеющийся сервер EC2 будет удален, а его место займет совершено новый сервер. Это пример парадигмы неизменяемой инфраструктуры, которую мы обсуждали в подразделе «Средства шаблонизации серверов» на с. 31. Стоит отметить, что, несмотря на замену веб-сервера, ни один из его пользователей не заметит перебоев в работе; в главе 5 вы увидите, как с помощью Terraform выполнять развертывания с нулевым временем простоя.