Terraform: инфраструктура на уровне кода | страница 94
description = "The ID of the Security Group attached to the load balancer"
}
Теперь представьте, что вам нужно сделать доступным извне дополнительный порт, сугубо для тестирования. Теперь это легко сделать: нужно лишь добавить в файл stage/services/webserver-cluster/main.tf ресурс aws_security_group_rule:
resource "aws_security_group_rule" "allow_testing_inbound" {
type = "ingress"
security_group_id = module.webserver_cluster.alb_security_group_id
from_port = 12345
to_port = 12345
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
Если бы вы определили входящее или исходящее правило в виде вложенного блока, этот код был бы нерабочим. Стоит отметить, что эта же проблема характерна для целого ряда ресурсов Terraform, включая следующие:
•aws_security_group и aws_security_group_rule;
• aws_route_table и aws_route;
•aws_network_acl и aws_network_acl_rule.
Теперь вы готовы развернуть свой кластер веб-серверов сразу в тестовой и промышленной средах. Выполните terraformapply и наслаждайтесь работой с двумя отдельными копиями своей инфраструктуры.
Сетевая изоляция
Показанные в этой главе примеры создают две среды, изолированные как в вашем коде Terraform, так и с точки зрения инфраструктуры: у них есть отдельные балансировщики нагрузки, серверы и базы данных. Но, несмотря на это, они не изолированы на уровне сети. Чтобы не усложнять примеры кода, все ресурсы в этой книге развертываются в одно и то же виртуальное частное облако (VPC). Это означает, что серверы в тестовой и промышленной среде могут взаимодействовать между собой.
В реальных сценариях использования запуск двух окружений в одном облаке VPC чреват сразу двумя рисками. Во-первых, ошибка, допущенная в одной среде, может повлиять на другую. Например, если при внесении изменений в тестовом окружении вы случайно сломаете правила в таблице маршрутизации, это скажется на перенаправлении трафика и в промышленных условиях. Во-вторых, если злоумышленник получит доступ к одной среде, он сможет проникнуть и в другую. Если вы активно меняете код в тестовом окружении и случайно оставите открытым какой-нибудь порт, любой взломщик, проникший внутрь, сможет завладеть не только тестовыми, но и промышленными данными.
В связи с этим, если не считать простые примеры и эксперименты, вы должны размещать каждую среду в отдельном облаке VPC. Для пущей уверенности окружения можно даже разнести по разным учетным записям AWS.