go-tfeを使ってHCP Terraform APIを呼び出してみた
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
以下のファイルを用意します。
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を取得しています。
orgs
にOrganizations
の情報が入ってくるので、それをlog
で出力しています。
今回は環境変数で、HCP TerraformのアドレスとTokenを渡していますが、tfe.Config
の部分で渡すことも可能です。
# 省略
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関連のツール作成が捗りそうです。
以前シェルスクリプトで作ったツールを置き換えてみたいと思います。