🥢

Terraform Enterprise をアップグレードする

2024/04/03に公開

Terraform Enterpriseの新しいバージョンv202402-2がリリースされたので、Terraform Enterpriseをアップグレードした際のメモです。

Prerequisites

Terraform Enterprise Flexible Deployment Option(以下TFE)に関してはこちらに記載した内容をベースに、Google Cloud上に構築しています。
https://zenn.dev/i10chu/articles/fcd8691c8d0194

アップグレード前の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.

backup-restore-password.json
{
  "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のイメージタグを修正します。

/etc/terraform-enterprise/compose.yaml
---
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