====== Tuples ====== In Terraform, a tuple is a sequence of values, identified by their order. Tuples are similar to lists, but they are intended to represent a fixed collection of elements where each element can have a different type. ====== Defining Tuples ====== Tuples can be defined using square brackets [] with elements separated by commas. Each element in the tuple can be of a different type. variable "example_tuple" { description = "An example of a tuple" type = tuple([string, number, bool]) default = ["hello", 42, true] } ====== Using Tuples ====== Tuples can be used to pass multiple values of different types within a single variable. You can access elements of a tuple using zero-based indexing. variable "example_tuple" { description = "An example of a tuple" type = tuple([string, number, bool]) default = ["hello", 42, true] } output "first_element" { value = var.example_tuple[0] # "hello" } output "second_element" { value = var.example_tuple[1] # 42 } output "third_element" { value = var.example_tuple[2] # true } ====== Tuples in Terraform Modules ====== When using tuples in modules, you can pass a tuple variable from a root module to a child module. ===== Root Module: ===== module "example" { source = "./child_module" example_tuple = ["hello", 42, true] } ===== Child Module: ===== variable "example_tuple" { description = "An example of a tuple" type = tuple([string, number, bool]) } output "first_element" { value = var.example_tuple[0] } output "second_element" { value = var.example_tuple[1] } output "third_element" { value = var.example_tuple[2] } ====== Nested Tuples ====== Tuples can also be nested within other tuples or complex types like objects. This allows for more complex data structures. variable "nested_tuple" { description = "A nested tuple" type = tuple([string, tuple([number, bool])]) default = ["outer", [42, true]] } output "outer_element" { value = var.nested_tuple[0] # "outer" } output "inner_number" { value = var.nested_tuple[1][0] # 42 } output "inner_bool" { value = var.nested_tuple[1][1] # true } ====== Examples ====== ===== Example 1: Simple Tuple ===== variable "simple_tuple" { description = "A simple tuple" type = tuple([string, number, bool]) default = ["example", 10, false] } resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" tags = { Name = var.simple_tuple[0] } } output "tuple_string" { value = var.simple_tuple[0] # "example" } output "tuple_number" { value = var.simple_tuple[1] # 10 } output "tuple_bool" { value = var.simple_tuple[2] # false } ===== Example 2: Complex Tuple ===== variable "complex_tuple" { description = "A complex tuple" type = tuple([ string, number, bool, list(string), map(string) ]) default = ["example", 10, false, ["item1", "item2"], {key1 = "value1", key2 = "value2"}] } output "tuple_string" { value = var.complex_tuple[0] # "example" } output "tuple_number" { value = var.complex_tuple[1] # 10 } output "tuple_bool" { value = var.complex_tuple[2] # false } output "tuple_list" { value = var.complex_tuple[3] # ["item1", "item2"] } output "tuple_map" { value = var.complex_tuple[4] # {key1 = "value1", key2 = "value2"} }