Comment définir des variables d'environnement ?

January 26, 2017
Rédigé par
Révisé par

CP66owhMZeayfuKH2GO2bPS_oOhngyGdAI323rP9xVWDwm-iRQI7XDiucQ5b4ReImcq346dkAXfpNwxW-GWruOggvVYfkTo2CXPwBwwQUO9CNVcXVL74Zy3TzwYXUHGpUW3q7l8E-4

Este post também está disponível em Português.

Il y a des choses que nous ne devrions pas partager avec notre code. Il s'agit souvent de valeurs de configuration qui dépendent de l'environnement, telles que les indicateurs de débogage ou les access tokens des API comme Twilio. Les variables d'environnement offrent une bonne solution et sont faciles à utiliser dans la plupart des langages de programmation.

Les variables d'environnement ????

l4JA1COQqiZB6.gif

Comme leur nom l'indique, les variables d'environnement sont des variables de votre système qui décrivent votre environnement. La variable d'environnement la plus connue est probablement PATH qui contient les chemins d'accès à tous les dossiers susceptibles de contenir des exécutables. Avec PATH, vous pouvez écrire dans votre terminal le nom d'un exécutable plutôt que son chemin d'accès complet, car l'interpréteur vérifie le répertoire local ainsi que tous les répertoires spécifiés dans la variable PATH pour cet exécutable.

Outre les variables « intégrées », vous avez également la possibilité de définir vos propres variables d'environnement. Comme elles sont liées à notre environnement, elles sont très utiles pour des choses telles que les access tokens des API. Vous pouvez définir une variable sur une valeur dans votre machine de développement et sur une autre valeur dans votre environnement de production sans avoir recours à des instructions if ni à des fichiers de configuration spéciaux.

Les librairies d'aide de Twilio, par exemple, recherchent les variables d'environnement TWILIO_ACCOUNT_SID et TWILIO_AUTH_TOKEN si vous instanciez un client sans ces deux valeurs. Ainsi, vous n'avez pas à vous soucier de transférer accidentellement des informations d'identification sensibles à un emplacement tel que GitHub.

Définir les variables d'environnement sur les distributions MacOS et Linux

Pour définir les variables d'environnement sur MacOS ou tout système d'exploitation UNIX, vous devez d'abord savoir quel interpréteur vous exécutez. Pour ce faire, exécutez la commande suivante dans votre terminal.

echo $SHELL

La fin de la sortie doit indiquer l'interpréteur en cours d'exécution. L'interpréteur type est bash que vous utiliserez dans cet exemple. Mais les étapes sont similaires pour d'autres interpréteurs tels que zsh ou fish.

Pour définir une variable d'environnement, vous devez utiliser la commande d'exportation au format suivant :

export KEY=value

Comme cette commande ne s'applique qu'à la session en cours, vous devez l'ajouter dans un fichier qui sera exécuté pour chaque session. Pour ce faire, ouvrez le fichier .bashrc dans votre répertoire d'accueil à l'aide de votre éditeur de code favori. Ajoutez ensuite la ligne suivante quelque part dans le fichier :

export TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Remplacez <YOUR_ACCOUNT_SID> par le SID de votre compte depuis votre console Twilio. Enregistrez le fichier et ouvrez une nouvelle instance de terminal pour vérifier si cela a fonctionné en exécutant :

echo $TWILIO_ACCOUNT_SID

Vous devriez voir la valeur que vous y avez enregistrée.

terminal-env-variable.png

Variables d'environnement Windows

Si vous utilisez une machine Windows, vous disposez de plusieurs moyens pour définir les variables d'environnement. Les méthodes les plus courantes consistent à utiliser PowerShell, CMD ou l'interface utilisateur graphique (GUI).

Vous pouvez stocker les variables d'environnement à trois emplacements différents :

  • Dans le processus en cours. Le processus en cours est le plus souvent l'interpréteur que vous exécutez, p. ex. PowerShell, CMD, Bash, etc. Toutefois, il peut s'agir également d'autres applications, y compris la vôtre. Tout processus enfant démarré à partir du processus en cours hérite des variables d'environnement de ce processus. Les variables d'environnement sont supprimées à la fin du processus. Autrement dit, vous devez reconfigurer les variables d'environnement chaque fois que vous ouvrez un nouvel interpréteur.
    C'est également de cette manière que les variables d'environnement sont stockées sur les distributions macOS et Linux.
  • Dans le registre des utilisateurs. La variable d'environnement est disponible pour tous les processus démarrés par l'utilisateur, et aucun autre utilisateur ne peut accéder à ces variables d'environnement (sans privilèges élevés).
  • Dans le registre de la machine. Les variables d'environnement sont disponibles pour l'ensemble des utilisateurs et des processus, et la définition des variables d'environnement pour la machine requiert des privilèges élevés.

Changes made to user and machine environment variables aren't available to processes that are already running. For the change to apply, restart your program or shell, or set the environment variable for both the process and the user or machine.

À quel emplacement devez-vous stocker les variables d'environnement ? 

Si vous exécutez votre application à partir d'un interpréteur et que vous ne souhaitez pas que les variables d'environnement soient conservées, définissez les variables d'environnement pour le processus en cours. Si vous souhaitez que les variables d'environnement soient conservées, stockez-les dans le registre des utilisateurs. Si vous souhaitez configurer des variables d'environnement pour tous les utilisateurs, et pas seulement pour un utilisateur spécifique ou pour vous-même, stockez-les dans le registre de la machine.

Définir les variables d'environnement à l'aide de PowerShell

Bien que PowerShell soit également pris en charge sur les distributions MacOS et Linux via PowerShell Core, Windows PowerShell est préinstallé sur Windows. C'est l'interpréteur recommandé pour la plateforme Windows. Les cmdlets suivantes pour la configuration des variables d'environnement fonctionnent sous Windows, macOS et Linux.

Le moyen le plus courant et le plus simple de définir des variables d'environnement dans PowerShell est d'utiliser la variable $Env, comme suit :

 

 

$Env:TWILIO_ACCOUNT_SID = '<YOUR_ACCOUNT_SID>'

Après $Env, ajoutez deux points, puis le nom de la variable d'environnement, suivi du signe égal et de la valeur que vous souhaitez utiliser. Cette action définit la variable d'environnement pour le processus en cours et est héritée par tout processus enfant que vous démarrez à partir de cet interpréteur.

Les deux alternatives suivantes donnent le même résultat, mais sont moins courantes :

New-Item -Path Env:\TWILIO_ACCOUNT_SID -Value '<YOUR_ACCOUNT_SID>'
[Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID', '<YOUR_ACCOUNT_SID>')
[Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID', '<YOUR_ACCOUNT_SID>', 'Process')

Pour conserver les variables d'environnement sur les instances de l'interpréteur, vous pouvez enregistrer les cmdlets dans votre script de profil ou sous Windows, dans le registre des utilisateurs ou le registre de la machine, comme suit :

Environment]::SetEnvironmentVariable('TWILIO_ACCOUNT_SID'

Setting environment variables in the user and/or machine registry will not immediately update the environment variables for processes that are currently running. To see the effects of the update environment variables, you'll need to restart those processes, such as your PowerShell shell.

Les deux commandes ci-dessus entraînent un no-op sur MacOS et Linux, car il n'existe pas de concept de variables d'environnement utilisateur ou machine, mais uniquement des variables d'environnement de processus. Pour plus d'informations, consultez la documentation Microsoft sur les variables d'environnement PowerShell.

Définir les variables d'environnement à partir de CMD

Cmd, l'invite de commandes également appelée cmd.exe, est fournie avec toutes les installations de Windows. Vous devrez probablement utiliser PowerShell, mais dans le cas contraire, voici comment définir les variables d'environnement à partir de cmd et des fichiers batch.

Pour définir une variable d'environnement, vous pouvez utiliser la commande set comme suit :

set TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Cette commande définit la variable d'environnement pour le processus en cours et les processus enfants héritent des variables d'environnement. Toutefois, lorsque vous fermez cmd, les variables d'environnement sont perdues. 

Pour conserver les variables d'environnement entre les processus, vous pouvez les stocker dans le registre des utilisateurs et/ou de la machine à l'aide de la commande setx.

# sets environment variable in the user registry
setx TWILIO_ACCOUNT_SID <YOUR_ACCOUNT_SID>

# sets environment variable in the machine registry
setx TWILIO_ACCOUNT_SID <YOUR_ACCOUNT_SID> /m

Setting environment variables in the user and/or machine registry will not immediately update the environment variables for processes that are currently running. To see the effects of the update environment variables, you'll need to restart those processes, like your PowerShell shell.

Ces commandes offrent davantage de fonctionnalités que vous pourrez approfondir en lisant la documentation sur la commande set et la commande setx.

Définir les variables d'environnement à l'aide de l'interface utilisateur graphique

La définition des variables d'environnement dans Windows à l'aide de la GUI est masquée derrière plusieurs couches de boîtes de dialogue de paramètres. Pour ouvrir l'interface correspondante, vous devez d'abord ouvrir l'invite d'exécution de Windows. Pour ce faire, appuyez simultanément sur les touches Windows et R de votre clavier. Ensuite, tapez sysdm.cpl dans le champ de saisie et appuyez sur Enter ou OK.

run-dialog.png

Dans la nouvelle fenêtre qui s'ouvre, cliquez sur l'onglet Advanced (Avancé), puis sur le bouton Environment Variables (Variables d'environnement) en bas à droite de la fenêtre.

windows-advanced-dialog.png
windows-env-dialog.png

La fenêtre comporte deux sections différentes. La première est la liste des variables d'environnement spécifiques à votre utilisateur. Cela signifie qu'elles ne sont pas disponibles pour les autres utilisateurs. L'autre section contient les variables du système qui sont partagées entre tous les utilisateurs.

Créez une variable spécifique à l'utilisateur en cliquant sur le bouton New (Nouveau) situé sous la section spécifique à l'utilisateur. Dans l'invite, vous pouvez maintenant spécifier le nom de votre variable ainsi que la valeur. Créez une nouvelle variable nommée TWILIO_ACCOUNT_SID et copiez votre SID de compte Twilio depuis la console. Appuyez sur OK dans l'invite pour créer la variable, puis sur OK dans la fenêtre Environment Variables (Variables d'environnement). Vous êtes maintenant prêt.

new-dialog.png

Pour vérifier si cela a fonctionné, ouvrez l'invite de commande en appuyant sur WindowsR et en tapant cmd.exe. Si l'invite de commande est déjà ouverte, assurez-vous de la redémarrer pour que vos modifications soient appliquées. Dans l'invite de commande, exécutez la commande suivante :

echo %TWILIO_ACCOUNT_SID%

La valeur enregistrée dans la variable d'environnement devrait s'afficher.

windows-cmd-dialog.png

Utilisation des fichiers .env

Dans certains cas, vous n'avez besoin que d'un ensemble de variables d'environnement pour un seul projet. Dans ce cas, les fichiers .env constituent une excellente solution. Il s'agit de fichiers au sein de votre projet dans lesquels vous spécifiez des variables d'environnement. Vous utilisez ensuite une librairie pour votre langage de programmation respectif afin de charger le fichier qui définira dynamiquement ces variables.

Il existe des librairies pour la plupart des langages de programmation afin de charger ces fichiers. En voici quelques-unes :

Créez un fichier env. dans votre dossier de projet (généralement à la racine) et placez-y les paires clé-valeur. Cela peut se présenter comme suit :

TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Il ne vous reste plus qu'à utiliser la librairie correspondante et la variable d'environnement. Dans Node.js, par exemple, le code correspondant se présente comme suit :

require('dotenv').config();
console.log('Your environment variable TWILIO_ACCOUNT_SID has the value: ', process.env.TWILIO_ACCOUNT_SID);

Since you most likely don’t want to commit your environment variables to a repository, make sure to add the .env file to your .gitignore to avoid accidentally pushing it.

Fournisseurs de Cloud

La définition des variables d'environnement sur votre machine de développement locale ou sur une machine virtuelle ne représente que la moitié du travail. Que se passe-t-il si vous hébergez votre application dans un environnement Cloud tel que Heroku, Azure ou AWS, ou si vous l'avez intégrée dans un conteneur Docker ? Heureusement, tous ces fournisseurs permettent de définir des variables d'environnement.

Si vous ne trouvez pas votre hôte Cloud dans cette liste, cela ne signifie pas nécessairement qu'il n'existe aucun moyen de configurer les variables d'environnement. Assurez-vous de consulter leur documentation pour en savoir plus.

Résumé

C'est tout ! Vous pouvez désormais définir des variables d'environnement. Autrement dit, vous pouvez extraire toutes les valeurs de configuration basées sur l'environnement de votre code et rendre ainsi votre code plus flexible et plus sûr !

Gardez à l'esprit que ces valeurs sont toujours stockées en texte brut. Si vous prévoyez de stocker des valeurs très sensibles, vous devriez envisager une solution de stockage secret, telle que Vault.

Si vous avez des questions ou que vous souhaitez me montrer ce que vous êtes en train de créer, n'hésitez pas à m'envoyer un e-mail à l'adresse dkundel@twilio.com ou à me contacter sur Twitter @dkundel. J'ai hâte de voir ce que vous allez construire !