go-tfeを使ってHCP Terraform APIを呼び出してみた

go-tfeを使ってHCP Terraform APIを呼び出してみた

2025.08.27

go-tfeとは

HCP Terraform・Terraform EnterpriseはAPIを提供しています。

API documentation for HCP Terraform | Terraform | HashiCorp Developer

ユーザーはAPIを使ってWorkspaceやProjectの情報取得や作成など、操作ができます。

go-tfeはHashiCorpがメンテナンスしている、HCP Terraform・Terraform Enterprise API用のGoクライアントです。

GitHub - hashicorp/go-tfe: HCP Terraform/Enterprise API Client/SDK in Golang

やってみた

go-tfeのREADME.mdのサンプルコードをベースに、アクセス可能なHCP Terraform Organizationsの一覧を取得して件数を表示してみます。

テスト用のディレクトリを作成します。

mkdir go-tfe-sample
cd go-tfe-sample

go.modファイルを作成して、go-tfeをインストールします。

# モジュール初期化(go.modファイル作成)
go mod init go-tfe-sample
# go-tfeインストール
go get github.com/hashicorp/go-tfe

環境変数に以下をセットします。

export TFE_ADDRESS=https://app.terraform.io
export TFE_TOKEN=<HCP Terraform API Token>

<HCP Terraform API Token>は、Macではデフォルトで~/.terraform.d/credentials.tfrc.jsonに保存されているはずです。

存在しない場合は、terraform loginまたはコンソール上でAPIトークンを発行できます。

Manage API tokens for HCP Terraform | Terraform | HashiCorp Developer

以下のファイルを用意します。

main.go
package main

import (
  "context"
  "log"

  "github.com/hashicorp/go-tfe"
)

func main() {
	config := &tfe.Config{
		RetryServerErrors: true,
	}

	client, err := tfe.NewClient(config)
	if err != nil {
		log.Fatal(err)
	}

	orgs, err := client.Organizations.List(context.Background(), nil)
	if err != nil {
		log.Fatal(err)
	}

	log.Printf("Found %d organizations", len(orgs.Items))
}

tfe.NewClientでクライアントを作成して、client.Organizations.ListでOrganizationsを取得しています。

orgsOrganizationsの情報が入ってくるので、それをlogで出力しています。

今回は環境変数で、HCP TerraformのアドレスとTokenを渡していますが、tfe.Configの部分で渡すことも可能です。

main.go
# 省略
config := &tfe.Config{
	Address: "https://tfe.local",
	Token: "insert-your-token-here",
  RetryServerErrors: true,
}
# 省略

準備ができたら以下でコードを実行します。

go run main.go

以下のように出力が返ってきたら成功です。

出力例
2025/08/27 13:52:13 Found 4 organizations

おわりに

go-tfeのサンプル実行をやってみました。

go-tfeを使うことで、HCP Terraform APIをGoで簡単に扱えます。

HCP Terraform関連のツール作成が捗りそうです。

以前シェルスクリプトで作ったツールを置き換えてみたいと思います。

https://dev.classmethod.jp/articles/hcp-terraform-delete-empty-workspaces/

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.