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.