Вирази
Важливою частиною Teraform файлів є вирази, які дозволяють використовувати різні типи даних, виконувати логічні операції, здійснювати обробку рядків, використовувати функції і багато іншого.
Типи виразів
Примітивні типи
- Цілочисельні значення (Number). Наприклад,
5,2.45. - Логічні значення (Boolean). Наприклад,
true,false. - Рядки (String). Наприклад,
"Hello, Terraform!".
Комплексні типи
- Списки (List). Наприклад,
["one", "two", "three"]. - Карти (Map). Наприклад,
{"name" = "John", "age" = 30}. - Набори (Set). Наприклад,
set("a", "b", "c").
variable "example_list" {
type = list(string)
default = ["one", "two", "three"]
}
variable "example_map" {
type = map(string)
default = {
name = "John"
age = "30"
}
}
Рядкові вирази
Рядкові вирази дозволяють маніпулювати та інтерполювати рядки.
resource "example" "hello" {
name = "Name: ${var.example_map["name"]}"
}
resource "example" "concat" {
name = "${var.prefix} - ${var.suffix}"
}
Функція format()
resource "example" "formatted_name" {
name = format("Name: %s, Age: %d", var.example_map["name"], var.example_map["age"])
}
Посилання
Посилання дозволяють доступ до ресурсів, змінних та вихідних даних.
resource "aws_instance" "example" {
ami = data.aws_ami.example.id
instance_type = var.instance_type
}
data "aws_ami" "example" {
most_recent = true
owners = ["self"]
filter {
name = "name"
values = ["example-*"]
}
}
Оператори
Оператори дозволяють виконувати математичні, логічні та інші операції.
Математичні оператори
variable "disk_size" {
default = 100
}
resource "aws_ebs_volume" "example" {
size = var.disk_size * 2
}
Логічні оператори
resource "aws_instance" "example" {
count = var.create_instance ? 1 : 0
}
Виклики функцій
Функції допомагають обробляти дані та виконувати різні завдання.
variable "name" {
default = "John"
}
resource "example" "length" {
name = length(var.name)
}
Умовні вирази
Умовні вирази дозволяють виконувати логічні операції та вибирати значення залежно від умови.
output "example_output" {
value = var.create_instance ? "Instance will be created" : "Instance will not be created"
}
Вирази циклу for
Вирази for дозволяють ітеруватися по списках та картах для створення нових структур даних.
variable "example_map" {
type = map(string)
default = {
name = "John"
age = "30"
}
}
output "example_map_keys" {
value = [for k, v in var.example_map : k]
}
Вирази splat
Вирази splat дозволяють легко отримати доступ до атрибутів усіх елементів у списку ресурсів або об'єктів.
Символ * для масового доступу до атрибутів
resource "aws_instance" "example" {
count = 3
ami = "ami-123456"
instance_type = "t2.micro"
}
output "instance_ids" {
value = aws_instance.example[*].id
}
Тут aws_instance.example[*].id повертатиме список з ID усіх створених екземплярів AWS EC2.
Умови версій
Версійні умови дозволяють визначати обмеження для версій провайдерів або модулів.
Основні версійні умови:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 3.0.0"
}
}
required_version = ">= 0.14.0"
}
Використання точних версій та діапазонів:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 3.0.0, < 4.0.0"
}
}
required_version = "~> 0.13.0"
}
Висновок
Використання виразів у Terraform є ключовим для створення гнучких та потужних конфігурацій. Ми розглянули різні типи виразів, включаючи примітивні та комплексні типи, оператори, рядкові та умовні вирази, виклики функцій, вирази циклу for, вирази splat та умовні версії. Розуміння цих концепцій допоможе вам ефективно використовувати Terraform у ваших проектах.
Посилання
https://developer.hashicorp.com/terraform/language/expressions/types https://developer.hashicorp.com/terraform/language/expressions/strings https://developer.hashicorp.com/terraform/language/expressions/references https://developer.hashicorp.com/terraform/language/expressions/operators https://developer.hashicorp.com/terraform/language/expressions/function-calls https://developer.hashicorp.com/terraform/language/expressions/conditionals https://developer.hashicorp.com/terraform/language/expressions/for https://developer.hashicorp.com/terraform/language/expressions/splat https://developer.hashicorp.com/terraform/language/expressions/version-constraints