Terraform Enterprise をアップグレードする
Terraform Enterpriseの新しいバージョンv202402-2がリリースされたので、Terraform Enterpriseをアップグレードした際のメモです。
Prerequisites
Terraform Enterprise Flexible Deployment Option(以下TFE)に関してはこちらに記載した内容をベースに、Google Cloud上に構築しています。
アップグレード前のTFEは、v202312-1を利用しています。
Adminインターフェースで確認できるバージョン情報
Backup
TFEのアップグレード手順はこちらのドキュメントに記載があります。
ドキュメントに記載があるとおり、まずはTFEのバックアップを取得していきます。バックアップの取得方法はこちらのドキュメントに記載があるので、それを参考にします。
バックアップリストアAPIを利用するための認可トークンは、TFEで利用するOrganization APIトークンやTeam APIトークンとは別モノになるため、以下のコマンドでバックアップリストアAPI用の認可トークンを取得します。
docker exec -t terraform-enterprise-tfe-1 /bin/bash -c 'cat /var/run/terraform-enterprise/backup-restore/config.hcl | grep backup_token'
backup_token = "e7a9d....."
バックアップリストア時に利用するパスワードをペイロードとして渡すために、JSONファイルとして用意しておきます。ここで指定したパスワードはリストアする際に同じ値が必要になるため、注意してください。
Important: The same password that was provided during backup must be provided during restore. This password can be used to access all of the data that was backed up. Please protect it very carefully.
{
"password": "tfe-fdo-backup-restore-password"
}
バックアップリストAPI用のトークン、TFEホスト名を環境変数に設定し、ドキュメントにある手順の通り、バックアップを取得します。
export BACKUP_RESTORE_TOKEN="e7a9d....."
export TFE_HOSTNAME="xxx.xxx.xxx"
curl --header "Authorization: Bearer $BACKUP_RESTORE_TOKEN" --request POST --data @backup-restore-password.json --output backup.blob https://${TFE_HOSTNAME}/_backup/api/v1/backup
無事にバックアップが取得できました。本環境においてはあまり多くのワークスペースがあるわけではないので、バックアップファイル自体もそんなに大きくありません。
$ ls -ltrh
total 5.7M
-rw-rw-r-- 1 ubuntu ubuntu 52 Apr 3 01:51 backup-restore-password.json
-rw-rw-r-- 1 ubuntu ubuntu 5.7M Apr 3 01:54 backup.blob
バックアップが取得出来たので、続いてTFEのアップグレードをしていきます。
Upgrade
ドキュメントを見ると、バックアップを取得したあとは、tfectl node drain
コマンドでTerraform Runを止めるという手順がありますが、本環境では別途オペレーションが行われているわけではないため、次の手順にあるTFEの停止を以下のコマンドで実施します。
sudo systemctl stop terraform-enterprise
TFEが停止したら、新しいTFEのイメージを取得します。TFEイメージの取得方法については、TFEの構築手順のこちらを参照下さい。
docker pull images.releases.hashicorp.com/hashicorp/terraform-enterprise:v202402-2
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hashicorp/tfe-agent now 94ffbe5f7400 10 minutes ago 359MB
<none> <none> 3a85c02b0b88 6 days ago 358MB
images.releases.hashicorp.com/hashicorp/terraform-enterprise v202402-2 0a149d0a3b86 6 days ago 4.1GB
hashicorp/tfe-agent latest c463a254a3f6 4 weeks ago 358MB
images.releases.hashicorp.com/hashicorp/terraform-enterprise v202312-1 169cc479009d 4 months ago 3.87GB
インスタンス上に新しいTFEイメージをダウンロード出来たら、compose.yml
のイメージタグを修正します。
---
name: terraform-enterprise
services:
tfe:
image: images.releases.hashicorp.com/hashicorp/terraform-enterprise:v202402-2
...
新しいイメージでTFEを立ち上げます。
sudo systemctl start terraform-enterprise
TFEが立ち上がったら、ヘルスチェックコマンドを実行して、ステータスを確認します。
$ docker compose exec tfe tfe-health-check-status
checking: Archivist Health Check...
| checks that Archivist is up and healthy
|- ✓ PASS
checking: Terraform Enterprise Health Check...
| checks that Terraform Enterprise is up and can communicate with Redis and Postgres
|- ✗ ERROR: error reaching http://127.0.0.1:9292/_health_check?full: Get "http://127.0.0.1:9292/_health_check?full": dial tcp 127.0.0.1:9292: connect: connection refused
checking: Terraform Enterprise Vault Health Check...
| checks that Terraform Enterprise can connect to Vault and is able to encrypt and decrypt tokens
|- ✗ ERROR: error reaching http://127.0.0.1:9292/_health_check/_vault_token: Get "http://127.0.0.1:9292/_health_check/_vault_token": dial tcp 127.0.0.1:9292: connect: connection refused
checking: Fluent Bit Health Check...
| checks that the configure Fluent Bit server is healthy
|- ✓ PASS
checking: Vault Server Health Check...
| checks that the configured Vault Server is healthy
|- ✓ PASS
2 checks failed.
問題なければ、しばらくするとヘルスチェックの結果として、以下の様にAll checks passed.
と出力されるはずです。
$ docker compose exec tfe tfe-health-check-status
checking: Archivist Health Check...
| checks that Archivist is up and healthy
|- ✓ PASS
checking: Terraform Enterprise Health Check...
| checks that Terraform Enterprise is up and can communicate with Redis and Postgres
|- ✓ PASS
checking: Terraform Enterprise Vault Health Check...
| checks that Terraform Enterprise can connect to Vault and is able to encrypt and decrypt tokens
|- ✓ PASS
checking: Fluent Bit Health Check...
| checks that the configure Fluent Bit server is healthy
|- ✓ PASS
checking: Vault Server Health Check...
| checks that the configured Vault Server is healthy
|- ✓ PASS
All checks passed.
TFEのAdminインターフェースからもバージョンアップされている事が確認出来ました。これでTFEのアップグレードは完了です。
TFEバージョンがv202402-2に更新
参考になりそうな部分あれば、ご活用ください!
Discussion