0
1

[その5] Terraform Cloud で別ワークスペースのoutputの値を参照する

Posted at

これは何?

Terraform Cloudにおけるワークスペース間の値の参照をtfe_outputsを使用して、参照した話になります。

tfe_outputsとは?

従来の別のプロジェクトのstateファイルを参照する際はterraform_remote_stateを使用しますが、HashiCorp HCP Terraformにおいてはtfe_outputのデータソースを使用することを推奨と記載されているため、今回はこちらを使ってTerraform Cloud 上でのワークスペース間の参照をしようと思います。

手順

今回使用するソースコードはこちらから参照をお願いします:pray:

以下のコードのようにtfe_outputsからnonsensitive_valuesを参照するようにします。

main.tf
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で呼び出すようにします。
image.png

上記のコードをgit にpushし、mainブランチにpull requestを投げるとterraform plan/applyが実行されます。

しかしここでエラーになります。「別ワークスペースのoutputsが参照できるためのトークンを定義していないためこのようなエラーが出力されているのか?」というのが私の考えです。

This object does not have an attribute named "network-templates_values".

image.png

こちらによると、おそらくですがワークスペースでワークスペース間の参照をできる権限がないから?かと考えます。

そのため、以下の画像の通りトークンを発行したのち、ワークスペース変数TFE_TOKENとして登録します。
image.png

image.png

その結果、以下のようにplan/applyが通るようになりました。

image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1