2017-10-19 81 views
1

我有以下terraform:terraform數據源遠程不工作狀態

data "terraform_remote_state" "stack" { 
    backend = "local" 

    config { 
    path = "terraform.tfstate" 
    } 
} 
output "diditwork" { 
    value = "${data.terraform_remote_state.stack.aws_autoscaling_group.main.id}" 
} 

和我在同一個文件夾中的文件terraform.tfstate:

{ 
    "version": 3, 
    "terraform_version": "0.9.3", 
    "serial": 14, 
    "lineage": "dc16a61f-72dd-435b-ba3f-5e36e14aace2", 
    "modules": [ 
     { 
      "path": [ 
       "root" 
      ], 
      "outputs": {}, 
      "resources": { 
       "aws_autoscaling_group.main": { 
        "type": "aws_autoscaling_group", 
        "depends_on": [ 
         "aws_launch_configuration.lc" 
        ], 
        "primary": { 
         "id": "djin-sample-asg-stag", 
         "attributes": { 
          "arn": "arn:aws:autoscaling:us-east-1:174120285419:autoScalingGroup:04c470fa-45f8-4711-aa31-b3ede40d6… 

但由於某些原因,當我做了terraform apply我的輸出不會爲自動縮放組ID打印任何內容。申請是成功的,它甚至不會拋出任何錯誤。 我在想什麼

回答

2

這是錯誤的。

value = "${data.terraform_remote_state.stack.aws_autoscaling_group.main.id}" 

您只能獲得數據中的根級別輸出。

https://www.terraform.io/docs/providers/terraform/d/remote_state.html#root-outputs-only

只有來自遠程狀態的根級別的輸出是可訪問的。 無法訪問狀態模塊的輸出。如果您希望 模塊輸出可通過遠程狀態進行訪問,則必須將 輸出傳遞到根輸出。

所以,你首先需要輸出的自動縮放ID,是這樣的:

output "asg_id" { 
value = "${aws_autoscaling_group.main.id}" 
} 

然後在數據獲取,你會做,

output "diditwork" { 
    value = "${data.terraform_remote_state.stack.asg_id}" 
} 

而且,做一個對於支持鎖定的後端(或者您真的想要使用它的場景),在同一位置上的遠程數據源通常是一個不好的主意。我假設你只是在實驗基礎上從同一位置執行遠程數據源,所以沒有造成任何損害,但在實際使用中,應該只使用上面輸出中使用的值。

+0

只是實驗而已。想到根輸出,但看到你也回答了!我現在有一個額外的問題,可以在一個模塊中使用這個數據源,然後使用模塊輸出錯誤嗎?似乎不適合我。我爲此製造了另一個問題。 – Scooby