TL;DR
Terraform CLI で、同じ作業ディレクトリの中に複数のステートを持つための仕組み。同じ設定から、互いに重ならない複数のリソースの組を作れる。
なぜ必要か
公式ドキュメントによると、本番環境を変える前に、インフラの複製を作って変更を試すのに使える。フィーチャーブランチごとに一時的なワークスペースを作り、テスト用のインフラを置く使い方もある。
仕組み
初期化した作業ディレクトリには、最初は default という名前のワークスペースだけがある。ワークスペースは、技術的にはステートファイルの名前を変えるのと同じである。
terraform workspace new で作り、list で一覧を表示し、select で切り替え、delete で削除する。1 つの作業ディレクトリで同時に選べるワークスペースは 1 つだけである。
注意点
同じ作業ディレクトリのワークスペースは同じバックエンドを使うので、アクセスを分けられない。開発段階ごとの環境や、認証情報の異なるチームを強く分けたいときには向かない。公式ドキュメントは、その場合は設定やバックエンドを分けることを勧めている。
HCP Terraform のワークスペースは、それぞれが設定を持つ別の概念である。