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 выполнять развертывания с нулевым временем простоя.