terraform: Retrieving values from a map using the lookup function

2 min read | by Jordi Prats

When using HCL, if we want to access an element within a map we can use the usual index access present on many other languages. By using the lookup function we can do exactly that but providing a default value in case there's no such key.

Let's assume we want to use a the following map:

{"a"="A", "b"="B"}

We can create a .tf file on an empty directory for terraform console to use it:

$ mkdir /tmp/tftest; cd /tmp/tftest; echo 'variable "map" { default = {"a"="A", "b"="B"} }' > var.tf
$ terraform console
> var.map
{
  "a" = "A"
  "b" = "B"
}

If we want to access any element on the map we can use the following syntax:

$ terraform console
> var.map["a"]
"A"

However, if the key is not defined it would return an error:

> var.map["z"]

 Error: Invalid index
 
   on <console-input> line 1:
   (source code not available)
 
 The given key does not identify an element in this collection value.

With the lookup() function we are telling it to retrieve a given key (second argument) from the map (first argument) or return a default value (third argument)

> lookup(var.map, "a", "notfound")
"A"
> lookup(var.map, "z", "notfound")
"notfound"

That's quite similar of what we could achieve using the try function:

> try(var.map["a"], "notfound")
"A"
> try(var.map["z"], "notfound")
"notfound"

Choosing between the two feels like personal choice though.


Posted on 18/03/2022

Categories