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"]

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")
> lookup(var.map, "z", "notfound")

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

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

Choosing between the two feels like personal choice though.

Posted on 18/03/2022