HCP Terraform APIを使ってWorkspaceを作成してみた
以前GitHub App インストールIDを取得する際に、HCP Terraform APIを使う機会がありました。
tfe providerを介さずに直接HCP Terraform APIを使う機会がなかったので、今回は勉強のためProject内にWorkspaceを作成してみます。
HCP Terraform API
HashiCorpの公式サイトでAPIドキュメントが公開されています。
各機能に対応したAPIリファレンスやサンプルリクエストが記載されています。
こちらを参考に進めていきます。
やってみた
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}'
{
"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
{
"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の情報を確認できると思います。
{
"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
{
"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)でした。