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



для получения списка подсетей, принадлежащих к вашей учетной записи AWS.

Источник данных представляет собой фрагмент информации, доступной сугубо для чтения, который извлекается из провайдера (в нашем случае из AWS) при каждом запуске Terraform. Добавляя источник данных в конфигурацию Terraform, вы не создаете ничего нового. Это просто возможность запросить информацию из API провайдера, чтобы сделать ее доступной для остального кода Terraform. Каждый провайдер предоставляет целый ряд источников. Например, провайдер AWS позволяет запрашивать данные о VPC и подсетях, идентификаторы AMI, диапазоны IP-адресов, идентификатор текущего пользователя и многое другое.

Синтаксис использования источников данных очень похож на синтаксис ресурса:

data "_" "" {

   [CONFIG ...]

}

PROVIDER — имя провайдера (например, aws), TYPE — тип источника данных, который вы хотите использовать (скажем, vpc), NAME — идентификатор, с помощью которого можно ссылаться на этот источник данных в коде Terraform, а CONFIG состоит из одного или нескольких аргументов, предусмотренных специально для этого источника. Вот как можно воспользоваться источником данных aws_vpc, чтобы запросить информацию о вашем облаке VPC по умолчанию (справочную информацию ищите во врезке «Замечание о виртуальных частных облаках по умолчанию» на с. 63):

data "aws_vpc" "default" {

  default = true

}

Стоит отметить, что в случае с источниками данных в качестве аргументов обычно передаются фильтры, которые указывают на то, какую информацию вы ищете. Источнику данных aws_vpc нужно указать лишь один фильтр, default=true, который инициирует в вашей учетной записи AWS поиск VPC по умолчанию.

Чтобы получить данные из источника, нужно использовать следующий синтаксис доступа к атрибутам:

data._..

Например, чтобы получить идентификатор VPC из источника данных aws_vpc, надо написать следующее:

data.aws_vpc.default.id

Вы можете добавить к этому еще один источник данных, aws_subnet_ids, чтобы найти подсети внутри этого облака VPC:

data "aws_subnet_ids" "default" {

  vpc_id = data.aws_vpc.default.id

}

Вы можете извлечь идентификаторы подсетей из источника aws_subnet_ids и воспользоваться аргументом с довольно странным названием vpc_zone_identifier, чтобы ваша группа ASG использовала эти подсети:

resource "aws_autoscaling_group" "example" {

  launch_configuration = aws_launch_configuration.example.name