これは何?
Terraform Cloudにおけるワークスペース間の値の参照をtfe_outputsを使用して、参照した話になります。
tfe_outputsとは?
従来の別のプロジェクトのstateファイルを参照する際はterraform_remote_stateを使用しますが、HashiCorp HCP Terraformにおいてはtfe_outputのデータソースを使用することを推奨と記載されているため、今回はこちらを使ってTerraform Cloud 上でのワークスペース間の参照をしようと思います。
手順
今回使用するソースコードはこちらから参照をお願いします
以下のコードのようにtfe_outputsからnonsensitive_valuesを参照するようにします。
data "tfe_outputs" "vpc" {
organization = "atsuw0w-test-terraform"
workspace = "test-terraform-cloud-private-registory"
}
# data "terraform_remote_state" "vpc" {
# backend = "remote"
# config = {
# organization = "atsuw0w-test-terraform"
# workspaces = {
# name = "test-terraform-cloud-private-registory"
# }
# }
# }
module "ec2_instance" {
source = "app.terraform.io/atsuw0w-test-terraform/webapp-templates/aws//modules/ec2_instance"
version = "1.0.1"
pj_tags = var.pj_tags
ec2 = {
prefix = "webapp"
instance_type = "t4g.micro"
subnet_id = data.tfe_outputs.vpc.nonsensitive_values.network-templates_values.subnet_pub_ids.pub_a
vpc_security_group_ids = [
data.tfe_outputs.vpc.nonsensitive_values.ec2-sg_values.sg_id
]
is_pubic = true
}
}
tfe_outputsの参照元については、以下の画像のように参照したいワークスペースのOutputsから参照することができます。今回は、Output属性にsensitive = true
を付与していないのでnonsensitive_values
で呼び出すようにします。
上記のコードをgit にpushし、mainブランチにpull requestを投げるとterraform plan/applyが実行されます。
しかしここでエラーになります。「別ワークスペースのoutputsが参照できるためのトークンを定義していないためこのようなエラーが出力されているのか?」というのが私の考えです。
This object does not have an attribute named "network-templates_values".
こちらによると、おそらくですがワークスペースでワークスペース間の参照をできる権限がないから?かと考えます。
そのため、以下の画像の通りトークンを発行したのち、ワークスペース変数TFE_TOKEN
として登録します。
その結果、以下のようにplan/applyが通るようになりました。