4
votes

Comment configurer les variables d'environnement dans Hashicorp Terraform

Je suis assez nouveau sur Terraform, même si j'ai parcouru tous les modules didactiques disponibles sur le site de Hashicorp.

Actuellement, j'ai du mal à comprendre comment configurer les variables d'environnement. Je sais comment référencer des variables dans la configuration main.tf ( access_key = "$ {var.access_key}" ), et je sais comment enregistrer cette clé d'accès dans un fichier séparé et y faire référence, mais ce que je ne comprends pas (et je ne trouve aucune documentation / instruction sur), c'est comment configurer les variables d'environnement pour ne pas avoir à enregistrer la clé d'accès dans un fichier.

Quelqu'un sait-il comment procéder au mieux?


0 commentaires

4 Réponses :


2
votes

Certains fournisseurs vous permettent de définir directement les informations d'identification / configuration du fournisseur via des variables d'environnement. Par exemple, dans le cas du fournisseur AWS, vous pouvez utiliser le Variables d'environnement AWS SDK comme mentionné dans la documentation du fournisseur AWS :

Vous pouvez fournir vos informations d'identification via les variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY, représentant respectivement votre clé d'accès AWS et votre clé secrète AWS.

Avec un exemple d'utilisation présenté comme suit:

export TF_VAR_foo=bar

Pour le Azure provider la plupart de la configuration du fournisseur peut être définie par des variables d'environnement sans avoir besoin d'être définie dans la configuration du fournisseur:

variable "foo" {}

Dans le cas plus général, Terraform chargera automatiquement toutes les variables définies précédées de TF_VAR_ .

Donc, si vous avez quelque chose comme ça:

$ export ARM_CLIENT_ID="aclientid"
$ export ARM_SUBSCRIPTION_ID="asubscriptionid"
$ export ARM_TENANT_ID="atenantid"
$ terraform plan

Vous pouvez définir la valeur en exportant la variable d'environnement TF_VAR_foo :

$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
$ export AWS_DEFAULT_REGION="us-west-2"
$ terraform plan


7 commentaires

Merci pour la réponse rapide! Juste pour fournir un peu plus de détails, j'utilise le fournisseur AzureRM, et pour référence, voici une partie de ma configuration main.tf: provider "azurerm" {version = "= 1.20.0" access_key = "$ {var.access_key } "region =" $ {var.region} "} Voici mon fichier de configuration variables.tf: variable" access_key "{} variable" region "{default =" eastus "} Je ... suppose que je ne sais toujours pas comment assignez ma clé d'accès à la variable $ {var.access_key}. J'ai dû louper quelque chose. Désolé d'être dense!


Excuses également, je ne sais pas comment obtenir le formatage pour coopérer pour ces commentaires!


Le fournisseur Azure n'accepte pas de paramètre access_key . Cela vaut probablement la peine de lire rapidement la documentation du fournisseur AzureRM pour mieux comprendre comment utilise le.


Ah, cela a du sens. Peut-être que je formule ma question de manière incorrecte. Alors, référencez cet article ( docs.microsoft.com/en-us/ azure / terraform / terraform-backend ) ‌, c'est essentiellement ce que j'essaie de faire. J'essaie simplement d'obtenir la clé d'accès au compte de stockage Azure stockée dans Azure Key Vault, et je ne parviens pas à exécuter correctement la commande export ARM_ACCESS_KEY = .


Il semble que vous faites deux choses différentes. Supprimez toute référence à 'access_key' de vos fichiers tf, puis essayez d'exécuter export ARM_ACCESS_KEY = avant tf plan


Donc, j'ai essayé cela, mais je suis incapable d'exécuter la commande d'exportation ARM_ACCESS_KEY = . Il dit que «l'exportation» n'est pas reconnue comme une commande interne ou externe, un programme utilisable ou un fichier de commandes. Des idées sur la façon de faire coopérer cela?


Si vous n'avez pas la commande export , vous êtes probablement sous Windows, ce qui signifie que vous devez utiliser la commande set . La commande complète que vous souhaitez utiliser est set ARM_ACCESS_KEY = "" sur l'invite cmd ou $ env: ARM_ACCESS_KEY = "" shellhacks.com/windows-set-environment-variable-cmd- powerhe‌ ll



7
votes

Terraform peut déduire les variables d'environnement suivantes pour AWS

provider "aws" {
  profile = "myprofile"
  region  = "${var.region}"
}

Réf: https://www.terraform.io/docs/providers/aws/#environment-variables

Mais je suggérerais d'essayer le Profil AWS . Vous pouvez ajouter des informations d'identification au fichier ~ / .aws / credentials comme

[myprofile]
aws_access_key_id     = anaccesskey
aws_secret_access_key = asecretkey

, puis vous pouvez définir la variable d'environnement export AWS_PROFILE = myprofile . Maintenant, si vous exécutez terraform à partir de ce shell, il doit choisir les informations d'identification répertoriées sous myprofile.

De plus, vous pouvez avoir votre code AWS Provider comme suit :

export AWS_ACCESS_KEY_ID="anaccesskey"
export AWS_SECRET_ACCESS_KEY="asecretkey"

D'après mon expérience, interagir avec AWS en utilisant profile est plus facile et mieux que de définir des variables d'environnement sur chaque shell.

Vous pouvez consulter un exemple ici https://github.com/ pradeepbhadani / tf-examples / blob / master / ex2 / provider.tf

J'espère que cela vous aidera.


1 commentaires

Merci d'avoir fourni ces suggestions. J'essaie cependant de faire fonctionner cela dans Azure, juste comme preuve de concept. Je pourrais jeter un coup d'œil à AWS Vault à un moment donné dans le futur.



0
votes

La manière Terraform d'utiliser des variables d'environnement et donc des valeurs arbitraires pour toutes les bonnes choses Terraform consiste à préfixer toute variable d'environnement avec TF_VAR_ , puis Terraform l'utilisera automatiquement.

Pour votre cas d'utilisation spécifique, cela signifie que vous pouvez définir la variable Terraform access_key en définissant la ** variable d'environnement * TF_VAR_access_key .

Cette technique est intégrée à Terraform lui-même et est donc indépendante de tout fournisseur spécifique.

La documentation est disponible à l'adresse https: //www.terraform. io / docs / commands / environment-variables.html # tf_var_name cela fonctionne aussi pour les versions plus anciennes de Terraform (je l'ai testé avec la 0.11).


0 commentaires

1
votes
  1. quand j'ai commencé à apprendre tf, j'ai utilisé un fichier terraform.tfvars dans lequel j'ai mis:
  2. aws configure
    AWS Access Key ID: yourID
    AWS Secret Access Key: yourSecert
    Default region name : aws-region
    Default output format : env
    

    dans main.tf:

    $ export AWS_ACCESS_KEY_ID="AWS_ACCESS_KEY_ID"
    $ export AWS_SECRET_ACCESS_KEY="AWS_SECRET_ACCESS_KEY"
    $ terraform plan
    

    en s'assurant que les deux fichiers sont dans le même répertoire. p>

    1. puis j'ai commencé à utiliser des variables d'environnement sous Mac:
    variable "aws_access_key" {}
    variable "aws_secret_key" {}
    variable "private_key_path" {}
    
    provider "aws" {
      access_key = var.aws_access_key
      secret_key = var.aws_secret_key
      region     = var.region
    }
    
    1. en utilisant le profil, ~/.aws/credentials
    aws_access_key="myaccesskey"
    aws_secret_key="mysecertkey"
    region='aws-region'
    

    J'espère que cela aide!

    bonne chance, terraform est une chose incroyable à apprendre!


0 commentaires