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



_..

Например, если вы хотите предоставить в качестве выходной переменной ARN одного из пользователей IAM, нужно сделать следующее:

output "neo_arn" {

  value       = aws_iam_user.example[0].arn

  description = "The ARN for user Neo"

}

Если вам нужны ARN всех пользователей IAM, вы должны указать символ * вместо индекса:

output "all_arns" {

  value       = aws_iam_user.example[*].arn

  description = "The ARNs for all users"

}

Если выполнить команду apply, вывод neo_arn будет содержать только ARN пользователя Neo, тогда как all_arns выведет список всех ARN:

$ terraform apply

(...)

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

Outputs:

neo_arn = arn:aws:iam::123456789012:user/neo

all_arns = [

  "arn:aws:iam::123456789012:user/neo",

  "arn:aws:iam::123456789012:user/trinity",

  "arn:aws:iam::123456789012:user/morpheus",

]

К сожалению, у параметра count есть два ограничения, которые делают его куда менее полезным. Во-первых, с помощью count можно пройтись по всему ресурсу, но при этом нельзя перебирать его вложенные блоки. Вложенный блок — это аргумент, который устанавливается внутри ресурса в следующем формате:

resource "xxx" "yyy" {

   {

    [CONFIG...]

  }

}

NAME — это имя вложенного блока (например, tag), а CONFIG состоит из одного или нескольких аргументов, предназначенных специально для него (вроде key и value). Посмотрите, как устанавливаются теги в ресурсе aws_autoscaling_group:

resource "aws_autoscaling_group" "example" {

  launch_configuration = aws_launch_configuration.example.name

  vpc_zone_identifier  = data.aws_subnet_ids.default.ids

  target_group_arns    = [aws_lb_target_group.asg.arn]

  health_check_type    = "ELB"

  min_size = var.min_size

  max_size = var.max_size

  tag {

    key                 = "Name"

    value               = var.cluster_name

    propagate_at_launch = true

  }

}

Каждый тег требует создания нового вложенного блока со значениями для key, value и propagate_at_launch. В предыдущем листинге вручную указан единственный тег, но можно разрешить пользователям передавать собственные. У вас может появиться соблазн воспользоваться параметром count для циклического перебора этих тегов и генерации динамических вложенных блоков tag, но, к сожалению, применение count внутри вложенного блока не поддерживается.

Второе ограничение параметра count даст о себе знать, когда вы попытаетесь его изменить. Рассмотрим созданный ранее список пользователей IAM: