2017-10-19 43 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