2017-10-02 3 views
1

J'utilise Terraform pour un déploiement de l'infrastructure:Comment obtenir un identifiant d'instance/arn d'une instance ec2 existante via terraform?

data "aws_instance" "ec2_my_admin_instance" { 
    filter { 
    name = "tag:TfServerType" 
    values = ["myAdmin"] 
    } 
} 


output "theId" { 
    value = "${data.aws_instance.ec2_my_admin_instance.instance_id}" 
} 
output "type" { 
    value = "${data.aws_instance.ec2_my_admin_instance.instance_type}" 
} 
output "placement_group" { 
    value = "${data.aws_instance.ec2_my_admin_instance.placement_group}" 
} 
output "availability_zone" { 
    value = "${data.aws_instance.ec2_my_admin_instance.availability_zone}" 
} 
output "arn" { 
    value = "${data.aws_instance.ec2_my_admin_instance.arn}" 
} 

Cependant, les valeurs les plus importantes (id, arn) ne sont pas représentés:

Outputs: 

availability_zone = ap-southeast-2b 
type = m4.large 

Ai-je raté quelque chose?

Répondre

1

@jdurkin a répondu à la question mais ne vous a pas dit comment l'obtenir, ce que vous demandez.

Les documents terraform ne sont pas toujours mis à jour avec tous les attributs (je les appelle available output variables). Dans votre cas, vous ne pouvez pas trouver le bon attribut à utiliser dans le document en ligne. Devinez est possible comme réponse de jdurkin, mais ce n'est pas toujours correct.

Vous devez donc les trouver vous-même et trouver le bon.

(vous pouvez changer la région avec votre région préférée)

provider "aws" { 
    region = "ap-southeast-2" 
} 

data "aws_instance" "ec2_my_admin_instance" { 
    filter { 
    name = "tag:TfServerType" 
    values = ["myAdmin"] 
    } 
} 

terraform apply le changement (il est source de données, ne crée pas de ressources, de sorte que vous êtes sûr de faire tourner)

terraform init 
terraform plan 
terraform apply 

Après avoir exécuté avec succès commandes ci-dessus, vous devriez obtenir un fichier local terraform.tfstate

Cat le fichier, en partie de attributes, vous devriez obtenir tous les attributs avec le nom et la valeur de l'attribut, id est dans la liste des attributs, mais il n'y a aucun attribut arn que vous pouvez confirmer maintenant. Vous devriez être sûr de choisir le bon et mettre dans vos codes de sortie.

"modules": [ 
     { 
      "path": [ 
       "root" 
      ], 
      "outputs": {}, 
      "resources": { 
       "data.aws_instance.ec2_my_admin_instance": { 
        "type": "aws_instance", 
        "depends_on": [], 
        "primary": { 
         "id": "i-xxxx", 
         "**attributes**": { 
          "ami": "ami-xxxx", 
          .... 
          "**id": "i-xxxx**", 
          "instance_state": "running", 
          .... 
         }, 
         "meta": {}, 
         "tainted": false 
        }, 
        "deposed": [], 
        "provider": "" 
       } 
      }, 
      "depends_on": [] 
     } 
    ]