HCP Terraform APIを使ってWorkspaceを作成してみた

HCP Terraform APIを使ってWorkspaceを作成してみた

Clock Icon2025.01.10

以前GitHub App インストールIDを取得する際に、HCP Terraform APIを使う機会がありました。

https://dev.classmethod.jp/articles/tfe-provider-hcp-terraform-github/

tfe providerを介さずに直接HCP Terraform APIを使う機会がなかったので、今回は勉強のためProject内にWorkspaceを作成してみます。

HCP Terraform API

HashiCorpの公式サイトでAPIドキュメントが公開されています。

各機能に対応したAPIリファレンスやサンプルリクエストが記載されています。

こちらを参考に進めていきます。

https://developer.hashicorp.com/terraform/cloud-docs/api-docs

やってみた

Project配下にWorkspaceを作成して、作成したWorkspaceの設定を確認するところまでやってみます。

参照したAPIリファレンスはブログの末尾にまとめて記載しています。詳細を確認したい場合は、そちらをご確認ください。

HCP Terraform Tokenの確認

APIリクエストを行うには、HCP Terraform Tokenが必要です。

ローカル端末のterraform loginでHCP Terraformにログインしたことがある場合は、以下のコマンドでTokenを確認できます。

cat ~/.terraform.d/credentials.tfrc.json
出力例
{
  "credentials": {
    "app.terraform.io": {
      "token": "<トークン>"
    }
  }
}

このあとの手順でTokenを使うため、環境変数にセットしておきます。

TOKEN="<前のコマンドで確認したトークンの値>"

~/.terraform.d/credentials.tfrc.jsonが存在しない場合は、terraform login実行してトークンを作成してください。

Organizations名を環境変数に設定

HCP TerraformのOrganizations名も度々必要になるため、環境変数にセットしておきます。

ORG_NAME="<HCP Terraform Organizations名>"

Project IDの確認(List projects)

Workspace作成先のProject IDを取得します。

以下で、Project名とProject IDの一覧を取得します。

curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  https://app.terraform.io/api/v2/organizations/$ORG_NAME/projects |  jq '.data[] | {name: .attributes.name, id}'
response
{
  "name": "hoge",
  "id": "prj-hogehoge"
}
{
  "name": "fuga",
  "id": "prj-fugafufa"
}
{
  "name": "hogefuga",
  "id": "prj-hogefuga"
}

Workspace作成先のProjectのIDを次の手順で利用するため、控えておいてください。

Workspace作成(Create a Workspace )

コマンドが長くなるので、Workspaceの設定部分を別のファイルに切り出します。

hcp-tf-api-testという名前のWorkspaceを先程確認したプロジェクト配下に作成します。

<Project ID>の部分は先程確認したIDに置き換えてください。

touch sample.json
sample.json
{
    "data": {
        "type": "workspaces",
        "attributes": {
            "name": "hcp-tf-api-test"
        },
        "relationships": {
            "project": {
                "data": {
                    "type": "projects",
                    "id": "<Project ID>"
                }
            }
        }
    }
}

sample.jsonを使ってAPIリクエストを実行します。

curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request POST \
  --data @sample.json \
  https://app.terraform.io/api/v2/organizations/$ORG_NAME/workspaces

Workspaceの確認(Show workspace)

作成したWorkspaceの内容を確認してみます。

curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  https://app.terraform.io/api/v2/organizations/$ORG_NAME/workspaces/hcp-tf-api-test | jq

以下のようにレスポンスが返ってきて、Workspaceの情報を確認できると思います。

response
{
  "data": {
    "id": "ws-XXXXXXXXXX",
    "type": "workspaces",
    "attributes": {
      "actions": {
        "is-destroyable": true
      },
      "allow-destroy-plan": true,
      "assessments-enabled": false,
      "auto-apply": false,
      "auto-apply-run-trigger": false,
      "auto-destroy-at": null,

後片付け: Workspaceの削除(Safe Delete a workspace)

最後に作成したWorkspaceを削除します。

curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request POST \
  https://app.terraform.io/api/v2/organizations/$ORG_NAME/workspaces/hcp-tf-api-test/actions/safe-delete

前の手順のWorkspaceの設定確認用のAPIを叩くと、削除されているため404が返ってくることが確認できます。

curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  https://app.terraform.io/api/v2/organizations/$ORG_NAME/workspaces/hcp-tf-api-test | jq
response
{
  "errors": [
    {
      "status": "404",
      "title": "not found"
    }
  ]
}

おわりに

HCP TerraformのAPIを使って、Workspace関連の操作を行ってみました。

tfe providerを使ってWorkspaceを作る場合に、tfe providerのStatefileを置くためのWorkspaceを手動で作成することがあると思います。(Workspaceを管理するWorkspace)

このWorkspace作成作業にHCP Terraform APIを使うことで、手動に比べてメンテナンスがしやすい手順書を作れそうです。

以上、AWS事業本部の佐藤(@chari7311)でした。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.