Terraform: инфраструктура на уровне кода | страница 101
Например, все нужные вам имена пользователей IAM можно перечислить во входной переменной внутри live/global/iam/variables.tf:
variable "user_names" {
description = "Create IAM users with these names"
type = list(string)
default = ["neo", "trinity", "morpheus"]
}
В языке программирования общего назначения с циклами и массивами вы бы назначили каждому пользователю IAM отдельное имя путем поиска значений в массиве var.user_names по индексу i:
# Это просто псевдокод. Он не будет работать в Terraform.
for (i = 0; i < 3; i++) {
resource "aws_iam_user" "example" {
name = vars.user_names[i]
}
}
В Terraform то же самое можно сделать с помощью count в сочетании:
• с синтаксисом доступа к массиву по индексу, который похож на синтаксис большинства других языков:
ARRAY[
Например, вот как взять из массива var.user_names элемент с индексом 1:
var.user_names[1]
• с функцией length. У Terraform есть встроенная функция под названием length, которая имеет следующий синтаксис:
length(
Как вы уже догадались, функция length возвращает количество элементов в заданном массиве. Она также работает со строками и ассоциативными массивами.
Если все это объединить, получится следующее:
resource "aws_iam_user" "example" {
count = length(var.user_names)
name = var.user_names[count.index]
}
Теперь, если выполнить команду plan, можно увидеть, что Terraform собирается создать трех пользователей IAM с уникальными именами:
Terraform will perform the following actions:
# aws_iam_user.example[0] will be created
+ resource "aws_iam_user" "example" {
+ arn = (known after apply)
+ force_destroy = false
+ id = (known after apply)
+ name = "neo"
+ path = "/"
+ unique_id = (known after apply)
}
# aws_iam_user.example[1] will be created
+ resource "aws_iam_user" "example" {
+ arn = (known after apply)
+ force_destroy = false
+ id = (known after apply)
+ name = "trinity"
+ path = "/"
+ unique_id = (known after apply)
}
# aws_iam_user.example[2] will be created
+ resource "aws_iam_user" "example" {
+ arn = (known after apply)
+ force_destroy = false
+ id = (known after apply)
+ name = "morpheus"
+ path = "/"
+ unique_id = (known after apply)
}
Plan: 3 to add, 0 to change, 0 to destroy.
Обратите внимание: если в ресурсе используется параметр count, он превращается в массив ресурсов. Поскольку aws_iam_user.example теперь является массивом пользователей IAM, вместо стандартного синтаксиса для чтения атрибутов (