Using helm from terraform

terraform helm resource

2 min read | by Jordi Prats

When it comes into configuring a helm chart using terraform we can configure it's values in two different ways: By using set or by pushing a template with it's values. Let's take a look:

Maybe the more straightforward way is by simply setting the variables to it's value using a set block like follows:

resource "helm_release" "datadog" {
  name       = "datadog"
  repository = "https://helm.datadoghq.com"
  chart      = "datadog"
  version    = "2.10.1"
  timeout    = 600

  namespace = var.namespace

  set {
    name  = "datadog.site"
    value = var.datadog_site
  }
}

Even though it's a nice way for setting a handful of values, as we need to push more values the terraform code becomes messier. Pushing a values.yaml template with the variables we want to set (or transform) is just as easy as setting a value using set:

resource "helm_release" "datadog" {
  name       = "datadog"
  repository = "https://helm.datadoghq.com"
  chart      = "datadog"
  version    = "2.10.1"
  timeout    = 600

  namespace = var.namespace

  values = [
    templatefile("${path.module}/datadog.yaml", {
      DATADOG_SITE = var.datadog_site,
    })
  ]
}

The template file will have to contain the values that the helm chart expects in yaml format. We can set variable using the ${} syntax. For example:

datadog:
  apiKey: ${DATADOG_SITE}

Posted on 25/03/2021