2017-10-19 5 views
1

je l'terraform suivante:source de données terraform état à distance ne fonctionne pas

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

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

et j'ai un fichier terraform.tfstate dans le même dossier:

{ 
    "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… 

mais pour une raison quelconque quand Je fais un terraform appliquer ma sortie ne imprime rien pour le groupe de mise à l'échelle automatique id. L'application est réussie et elle ne jette même pas d'erreur. Qu'est-ce que je manque?

Répondre

2

Ceci est faux.

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

Vous pouvez uniquement obtenir des sorties de niveau racine dans les données.

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

Seules les sorties de niveau racine de l'état à distance sont accessibles. Les sorties des modules dans l'état sont inaccessibles. Si vous souhaitez qu'une sortie de module soit accessible via un état distant, vous devez insérer la sortie dans une sortie racine.

Donc, vous devez d'abord sortir votre identifiant de autoscaling, quelque chose comme:

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

Et puis dans les données se, vous allez faire,

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

En outre, faire une La source de données distante sur le même emplacement sera une mauvaise idée en général pour les backends qui supportent le verrouillage (ou pour les scénarios où vous voulez vraiment l'utiliser). Je suppose que vous faites la source de données à distance à partir du même emplacement uniquement à titre expérimental, donc pas de mal fait, mais en utilisation réelle, vous devriez simplement utiliser la valeur utilisée dans la sortie ci-dessus.

+0

yup expérimental seulement. Compris la sortie de la racine, mais juste vu que vous avez répondu aussi! J'ai maintenant un problème supplémentaire qui est peut utiliser cette source de données dans un module, puis utiliser le module pour sortir diditwork? Ça ne semble pas marcher pour moi. Ill créer une autre question pour cela. – Scooby