[HCP Terraform]別WorkspaceのOutputを参照する際の制御方法(Remote State SharingとTFE_TOKEN利用パターン)

[HCP Terraform]別WorkspaceのOutputを参照する際の制御方法(Remote State SharingとTFE_TOKEN利用パターン)

Clock Icon2025.04.24

HCP Terraformで別WorkspaceのOutputを参照したいときがあります。

例えば、Network WorkspaceとCompute Workspaceがあって、Network WorkspaceのVPC IDをCompute Workspaceで取得したいなどです。

compute/main.tf
data "tfe_outputs" "network" {
  organization = var.hcp_tf_organization
  workspace    = "network-workspace"
}

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 20.0"
  vpc_id                         = data.tfe_outputs.network.values.vpc.vpc_id
  subnet_ids                     = concat(data.tfe_outputs.network.values.private_subnets, data.tfe_outputs.network.values.vpc.public_subnets)

# 省略

}

HCP Terraformでは、Outputをどのワークスペースで利用するかを制御する方法が2つあります。

  • Remote State Sharing
  • TFE_TOKENをWorkspaceの環境変数にセット

今回はこの2つの方法の概要と使い分けを紹介します。

結論

  • 基本はRemote State Sharingを利用
    • TFE_TOKENの管理が不要なため
  • HCP WaypointやNo Code Provisioningで利用するModuleが、他WorkspaceのOutputを使う場合は、ProjectにTFE_TOKENを設定する

方法1: Remote State Sharing

vscode-drop-1745481869373-z8nt7vf0k9p.png

HCP Terraformの機能で、特定のWorkspaceにStatefileを共有する機能です。

共有元のWorkspaceの設定で、共有先のWorkspaceを選択するだけのため設定が簡単です。

共有元WorkspaceからどのWorkspaceに共有しているか確認できるため、設定の把握も容易です。

vscode-drop-1745475430267-hm1nmaab5m.png

スクショの設定では、Workspace gitlab-eks-networkのOutputを以下のWorkspaceから参照できます。

  • gitlab-eks-cluster-automode
  • gitlab-eks-kube-automode
  • gitlab-eks-cluster
  • gitlab-eks-gitaly

https://www.hashicorp.com/ja/blog/announcing-controlled-remote-state-access-for-terraform-cloud-and-enterprise

https://dev.classmethod.jp/articles/terraform-cloud-workspace-state-ref/

方法2: TFE_TOKENをWorkspaceの環境変数にセット

vscode-drop-1745481972408-hkutbo02c1w.png

HCP TerraformをAPIやTerraform経由で操作するときに、認証用にトークンを利用します。

このトークンをWorkspaceの環境変数にセットすることで、Remote State Sharingの設定なしでWorkspace Outputを取得できます。

トークンはいくつか種類がありますが、Team Tokenを使った設定例は以下です。

  1. Teamを作成する
  2. Team Tokenを作成する
  3. ProjectまたはWorkspaceに対して、Team Accessを設定する
  4. 共有先のWorkspaceまたはProjectのVariablesにTeam Tokenを設定する

vscode-drop-1745480458313-tj7rk1a6ic7.png

Remote State Sharingと比較して、手順が多いですね。

トークンは機密情報のため、取り扱いにも気を付ける必要があります。

セキュリティと運用負荷の観点から、基本はRemote State Sharingを使うことをおすすめします。

ユースケース

HCP WaypointやNo Code Provisioningを使う場合は、TFE_TOKENパターンを使ったほうが楽です。

Remote State Sharingでは、未作成のWorkspaceに対して共有ができないためです。

また、Project単位の共有も現時点(2024/4/24時点)ではできません。(Organizations単位の共有は可能。)

vscode-drop-1745482712276-jnemugj9pw.png

この仕様は、HCP WaypointやNo Code Provisioningを利用する際に困ります。

既存のWorkspaceを参照するWorkspaceをHCP Waypointで作成する場合、参照ができずエラーになります。

Workspace作成後に、参照先のWorkspaceでRemote State Sharingを設定して再実行が必要になります。

この問題は、Workspace作成前にTFE_TOKENをProjectのVariablesとして設定しておくことで回避できます。

vscode-drop-1745482860359-tpli0fnjn2c.png

おわりに

Remote State Sharingを使っている方が多いと思います。

HCP WaypointやNo Code Provisioning使う際は、TFE TOKENを使うパターンもご検討いただければ思います。

Remote State SharingのProject単位の共有への対応に期待しています。

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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.