grasys blog

Terraform に Helm チャートを組み込む

はじめに

弊社では、インフラ構築に Terraform を使用しています。

Terraform は クラウド プラットフォームのリソースを作成するため、provider と呼ばれるプラグインを利用する必要があります。

Google Cloud のリソースを作成する場合は google provider を使用します。

provider はクラウド プラットフォームのリソース構築だけでなく、他にも使い方があります。

今回は Google Kubernetes Engine のクラスタへ、Terraform と Helm provider を組み合わせてソフトウェアをインストールする方法をご紹介します。

Helm provider を使用するメリット

Helm は、Kubernetes のパッケージマネージャーです。
Kubernetes アプリケーションを作成するために必要な情報をチャートと呼ばれるパッケージにまとめる事で、複雑な Kubernetes アプリケーションのインストール、更新などを管理しやすくします。

Google Cloud の Google Kubernetes Engine クラスタを構築する際、google provider はクラスタとノードプールを作成するまでを可能にしてくれます。
そこに、Helm provider を追加する事で、構築したクラスタにソフトウェアをインストールすることができます。

Terraform で構築するインフラと、基盤としてインストールするソフトウェアを Terraform で一括管理、設定することができ、構築の手間が減るのが嬉しいところです。

使用例

案件における使用例として、Terraform で構築した Google Kubernetes Engine クラスタに Helm で Agones をインストールする構成があります。

Agones は、ゲームサーバーのホスティングやスケーリングを行うプラットフォームソフトウェアです。
Agones についてはこちらの 過去記事 をご参照ください

Agones は Helm コマンドでインストールする際、以下のようなコマンドを必要とします。
(https://agones.dev/site/docs/installation/install-agones/helm/ より引用)

helm repo add agones https://agones.dev/chart/stable
helm repo update
helm install my-release --namespace agones-system --create-namespace agones/agones

こちらを、Terraform コードに組み込むと下記のようなコードになります。

terraform {
  required_providers {
    # google provider を宣言
    google = {
      source  = "hashicorp/google"
      version = "7.33.0"
    }
    # helm provider を宣言
    helm = {
      source  = "hashicorp/helm"
      version = "3.21.0"
    }
  }
}

data "google_client_config" "default" {
}

resource "google_container_cluster" "default" {
# GKE クラスタの宣言部、長いため省略
}

provider "helm" {
  # Terraform がクラスタに対して Helm チャートのインストールを実施するために必要な認証情報
  kubernetes {
    host  = "https://${data.google_container_cluster.default.endpoint}"
    token = data.google_client_config.default.access_token
    cluster_ca_certificate = base64decode(
      data.google_container_cluster.default.master_auth[0].cluster_ca_certificate,
    )
  }
}

resource "helm_release" "agones" {
  name             = "agones"
  repository       = "https://agones.dev/chart/stable"
  chart            = "agones"
  # version          = <agones version> 特定バージョンが必要な場合は記載する
  namespace        = "agones-system"
  create_namespace = true
}

Helm provider に GKE クラスタの認証情報を渡すのがポイントです。

まとめ

Helm チャートを Terraform で管理すると、インフラと、基盤としてインストールするソフトウェアを一括で管理することができ、便利です。

Helm チャートでインストールできる Kubernetes アプリケーションは多種多様です。

どんなアプリケーションが Helm で提供されているか気になった方は、まずは CNCF がホストしている Web サイト、Artifact Hub で調べてみるのがオススメです。

https://artifacthub.io


採用情報
お問い合わせ