Sling Academy
Home/DevOps/Base64 Encoding/Decoding in Terraform: A Practical Guide

Base64 Encoding/Decoding in Terraform: A Practical Guide

Last updated: February 03, 2024

Overview

Terraform, an open-source infrastructure as code software tool created by HashiCorp, enables users to define and provision data center infrastructure using a declarative configuration language. Among its many features, Terraform provides built-in functions for Base64 encoding and decoding, which can be especially useful for managing secrets, generating machine-readable formats, or handling data that needs to be encoded for specific reasons. This tutorial will guide you through using these functions in Terraform with practical examples, ranging from basic to advanced applications.

Base64 Encoding

Base64 encoding is a binary-to-text encoding schemes that represent binary data in an ASCII string format by translating it into a radix-64 representation. It is commonly used in a wide range of applications, including email handling and encoding binary files for internet transmission. Terraform supports Base64 encoding through its built-in functions, allowing seamless integration with its configuration files.

Basic Encoding Example

To begin, let’s encode a simple string using Terraform’s base64encode function. Save the following code snippet in a Terraform configuration file (e.g., main.tf):

variable "my_secret" {
  type = string
  default = "hello world"
}

output "encoded_secret" {
  value = base64encode(var.my_secret)
}

After saving the file, run terraform apply in your terminal. You’ll receive an output similar to:

encoded_secret = aGVsbG8gd29ybGQ=

This is your encoded string. As seen, the base64encode function easily converts plaintext to a Base64 encoded string.

Decoding a Base64 String

Next, let’s see how to decode a Base64 encoded string back to its original form. Update your main.tf file as follows:

output "decoded_secret" {
  value = base64decode("aGVsbG8gd29ybGQ=")
}

After running terraform apply again, the output will be:

decoded_secret = hello world

The base64decode function reverses the encoding process, returning the original string.

Using Base64 with Files

Encoding and decoding files in Base64 can be particularly useful for configurations that require file data to be injected directly into resources. The following example demonstrates encoding a file’s contents:

resource "aws_s3_bucket_object" "example_object" {
  bucket = aws_s3_bucket.example.bucket
  key    = "example_file.txt"
  content = base64encode(file("path/to/your/file.txt"))
}

This example shows how to use Terraform to upload a Base64 encoded file to an S3 bucket. Replacing "path/to/your/file.txt" with the actual file path you wish to encode and upload.

Adding Complexity: Decoding in Multiple Steps

Some advanced scenarios may require decoding a Base64 encoded string, processing it, and then possibly re-encoding it. Let’s consider an example where you decode an encoded string, modify it, and then encode it again:

locals {
  original_encoded = "aGVsbG8gd29ybGQ="
  decoded = base64decode(local.original_encoded)
  modified = "${local.decoded} Terraform!"
  re_encoded = base64encode(local.modified)
}

output "re_encoded_message" {
  value = local.re_encoded
}

Running terraform apply will give you the modified and re-encoded message as an output. This demonstrates the versatility of Terraform’s Base64 functions for various encoding/decoding tasks.

Conclusion

This tutorial provided a comprehensive guide to using Base64 encoding and decoding in Terraform through various practical examples. Starting with simple string encoding/decoding, progressing to file handling, and covering advanced manipulation scenarios, we explored how these functionalities can enhance your Terraform configurations and workflows. With this knowledge, employing Base64 in Terraform becomes a seamless task, enabling efficient management and manipulation of encoded data.

Next Article: JSON encoding/decoding in Terraform: Explained with examples

Previous Article: Terraform: How to create a map from two lists (keys and values)

Series: Terraform Tutorials

DevOps

You May Also Like

  • How to reset Ubuntu to factory settings (4 approaches)
  • Making GET requests with cURL: A practical guide (with examples)
  • Git: What is .DS_Store and should you ignore it?
  • NGINX underscores_in_headers: Explained with examples
  • How to use Jenkins CI with private GitHub repositories
  • Terraform: Understanding State and State Files (with Examples)
  • SHA1, SHA256, and SHA512 in Terraform: A Practical Guide
  • CSRF Protection in Jenkins: An In-depth Guide (with examples)
  • Terraform: How to Merge 2 Maps
  • Terraform: How to extract filename/extension from a path
  • JSON encoding/decoding in Terraform: Explained with examples
  • Sorting Lists in Terraform: A Practical Guide
  • Terraform: How to trigger a Lambda function on resource creation
  • How to use Terraform templates
  • Understanding terraform_remote_state data source: Explained with examples
  • Jenkins Authorization: A Practical Guide (with examples)
  • Solving Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap
  • Understanding Artifacts in Jenkins: A Practical Guide (with examples)
  • Using Jenkins with AWS EC2 and S3: A Practical Guide