LoginSignup
6
2

More than 5 years have passed since last update.

terraform_remote_stateで値を取得する際にはoutputの位置が大事

Last updated at Posted at 2018-01-18

やりたかったこと

VPCとそれに乗るサービスを別々のTerraformで管理、VPCのIDをoutputで出力してそれをterraform_remote_stateで呼び出して利用したかった。 これはできた

workspaceとしてvpc-dev, db-devを用意、db-devをデプロイする際にvpc-devのoutputを利用したかったが、まだworkspaceをまたいでのoutputの利用はうまくできていない...ヘルプミー

とりあえずうまく行った部分だけ共有!

だめな例

├── vpc
│   ├── main.tf
│   ├── output.tf
│   └── variables.tf
└── vpc.tf
output.tf
output "vpc_id" {
  value = "${aws_vpc.vpc.id}"
}

main.tfvariable.tfは省略

vpc.tf
module "vpc" {
  source = "./vpc"
}

上記だとmoduleのvpcのoutputになるが、以下の記事からterraformのremote_stateはルートレベルのものしか許容していないためremote_stateは利用できない

ルートレベル出力のみがアクセス可能です

tfstateを覗いて見るとルートにはoutputがなく、vpcモジュールにoutputがある

terraform.tfstate
~~~~~~~~~略~~~~~~~~~~~~
    "modules": [
            {
            "path": [
                "root"
            ],
            "outputs": {},
~~~~~~~~~略~~~~~~~~~~~~
            "path": [
                "root",
                "vpc"
            ],
            "outputs": {
                "vpc_id": {
                    "sensitive": false,
                    "type": "string",
                    "value": "vpc-*******"
                }
            },
~~~~~~~~~略~~~~~~~~~~~~

良い例

モジュールを呼び出した所で再度outputしてあげればOK

vpc.tf
module "vpc" {
  source = "./vpc"
}

output "vpc_id" {
  value = "${module.vpc.vpc_id}"
}

tfstateを見てみるとルートに値があることが確認できる

terraform.tfstate
~~~~~~~~~略~~~~~~~~~~~~
    "modules": [
            {
            "path": [
                "root"
            ],
            "outputs": {
                "vpc_id": {
                    "sensitive": false,
                    "type": "string",
                    "value": "vpc-********"
                }
            },
~~~~~~~~~略~~~~~~~~~~~~
            "path": [
                "root",
                "vpc"
            ],
            "outputs": {
                "vpc_id": {
                    "sensitive": false,
                    "type": "string",
                    "value": "vpc-*******"
                }
            },
~~~~~~~~~略~~~~~~~~~~~~

これによってremote_stateからoutputを取得できるようになりました

workspaceをまたいだremote_stateの利用ができるのかがまだわかっていないので知ってる人いたら教えてほしいです:bow:

参考リンク

6
2
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
6
2