[HCP Terraform]別WorkspaceのOutputを参照する際の制御方法(Remote State SharingとTFE_TOKEN利用パターン)
HCP Terraformで別WorkspaceのOutputを参照したいときがあります。
例えば、Network WorkspaceとCompute Workspaceがあって、Network WorkspaceのVPC IDをCompute Workspaceで取得したいなどです。
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
HCP Terraformの機能で、特定のWorkspaceにStatefileを共有する機能です。
共有元のWorkspaceの設定で、共有先のWorkspaceを選択するだけのため設定が簡単です。
共有元WorkspaceからどのWorkspaceに共有しているか確認できるため、設定の把握も容易です。
スクショの設定では、Workspace gitlab-eks-network
のOutputを以下のWorkspaceから参照できます。
- gitlab-eks-cluster-automode
- gitlab-eks-kube-automode
- gitlab-eks-cluster
- gitlab-eks-gitaly
方法2: TFE_TOKENをWorkspaceの環境変数にセット
HCP TerraformをAPIやTerraform経由で操作するときに、認証用にトークンを利用します。
このトークンをWorkspaceの環境変数にセットすることで、Remote State Sharingの設定なしでWorkspace Outputを取得できます。
トークンはいくつか種類がありますが、Team Tokenを使った設定例は以下です。
- Teamを作成する
- Team Tokenを作成する
- ProjectまたはWorkspaceに対して、Team Accessを設定する
- 共有先のWorkspaceまたはProjectのVariablesにTeam Tokenを設定する
Remote State Sharingと比較して、手順が多いですね。
トークンは機密情報のため、取り扱いにも気を付ける必要があります。
セキュリティと運用負荷の観点から、基本はRemote State Sharingを使うことをおすすめします。
ユースケース
HCP WaypointやNo Code Provisioningを使う場合は、TFE_TOKENパターンを使ったほうが楽です。
Remote State Sharingでは、未作成のWorkspaceに対して共有ができないためです。
また、Project単位の共有も現時点(2024/4/24時点)ではできません。(Organizations単位の共有は可能。)
この仕様は、HCP WaypointやNo Code Provisioningを利用する際に困ります。
既存のWorkspaceを参照するWorkspaceをHCP Waypointで作成する場合、参照ができずエラーになります。
Workspace作成後に、参照先のWorkspaceでRemote State Sharingを設定して再実行が必要になります。
この問題は、Workspace作成前にTFE_TOKENをProjectのVariablesとして設定しておくことで回避できます。
おわりに
Remote State Sharingを使っている方が多いと思います。
HCP WaypointやNo Code Provisioning使う際は、TFE TOKENを使うパターンもご検討いただければ思います。
Remote State SharingのProject単位の共有への対応に期待しています。
以上、AWS事業本部の佐藤(@chari7311)でした。