Festlegen von Umgebungsvariablen

January 26, 2017
Autor:in:
Prüfer:in:

CP66owhMZeayfuKH2GO2bPS_oOhngyGdAI323rP9xVWDwm-iRQI7XDiucQ5b4ReImcq346dkAXfpNwxW-GWruOggvVYfkTo2CXPwBwwQUO9CNVcXVL74Zy3TzwYXUHGpUW3q7l8E-4

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

Es gibt Dinge, die wir einfach nicht direkt in unseren Code einbetten sollten. Meist sind das Konfigurationswerte, die von der Umgebung abhängen, z. B. Debugging-Flags oder Zugriffstoken für APIs wie Twilio. Umgebungsvariablen sind hier eine gute Lösung und können in den meisten Programmiersprachen einfach verwendet werden.

Umgebungsvariablen?

l4JA1COQqiZB6.gif

Wie der Name vermuten lässt, sind Umgebungsvariablen die Variablen in Ihrem System, die Ihre Umgebung beschreiben. Die bekannteste Umgebungsvariable ist wahrscheinlich PATH. Sie enthält die Pfade zu allen Ordnern, die ausführbare Dateien enthalten könnten. Mit PATH müssen Sie statt des kompletten Pfads nur den Namen der ausführbaren Datei in Ihrem Terminal eingeben. Daraufhin prüft die Shell das lokale Verzeichnis und die Verzeichnisse, die in der PATH-Variablen für die ausführbare Datei angegeben sind.

Neben den integrierten Variablen können Sie auch eigene Umgebungsvariablen definieren. Da sie an Ihre Umgebung gebunden sind, eignen sie sich bestens für beispielsweise API-Zugriffstokens. Sie können eine Variable auf Ihrem Entwicklungscomputer auf einen Wert und in Ihrer Produktionsumgebung auf einen anderen Wert setzen – ganz ohne if-Anweisungen oder spezielle Konfigurationsdateien.

Die Hilfebibliotheken von Twilio suchen beispielsweise nach den Umgebungsvariablen TWILIO_ACCOUNT_SID und TWILIO_AUTH_TOKEN, wenn Sie einen Client ohne die beiden Werte instanziieren. Auf diese Weise verhindern Sie, dass sensible Anmeldeinformationen freigegeben werden, zum Beispiel auf GitHub.

Umgebungsvariablen auf macOS und Linux-Distributionen einrichten

Finden Sie zunächst heraus, welche Shell Sie ausführen, bevor Sie Umgebungsvariablen auf macOS oder einem beliebigen UNIX-basierten Betriebssystem festlegen. Führen Sie dazu in Ihrem Terminal folgenden Befehl aus:

echo $SHELL

Am Ende der Ausgabe sehen Sie, welche Shell ausgeführt wird. Typischerweise wird die bash-Shell ausgeführt, die wir auch im Beispiel verwenden. Die Schritte ähneln sich jedoch für andere Shells wie zsh oder fish.

Um eine Umgebungsvariable festzulegen, brauchen Sie einen Exportbefehl im folgenden Format:

export KEY=value

Da sich das nur auf die aktuelle Sitzung auswirkt, müssen Sie diesen Befehl zu einer Datei hinzufügen, die für alle Sitzungen ausgeführt wird. Öffnen Sie dazu die Datei .bashrc in Ihrem Stammverzeichnis mit Ihrem bevorzugten Code-Editor. Fügen Sie an einer beliebigen Stelle der Datei die folgende Zeile hinzu:

export TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Ersetzen Sie <YOUR_ACCOUNT_SID> durch Ihre Konto-SID aus der Twilio-Konsole. Speichern Sie die Datei und öffnen Sie eine neue Terminalinstanz, um mit folgendem Befehl zu testen:

echo $TWILIO_ACCOUNT_SID

Sie müssten nun den von Ihnen gespeicherten Wert sehen.

terminal-env-variable.png

Windows-Umgebungsvariablen

Auf einem Windows-Computer haben Sie mehrere Möglichkeiten, Umgebungsvariablen einzurichten. Zu den gängigsten Methoden gehören PowerShell, CMD oder die grafische Benutzeroberfläche (GUI).

Es gibt drei unterschiedliche Speicherorte für Umgebungsvariablen:

  • Im aktuellen Prozess. Der aktuelle Prozess ist in der Regel eine Shell wie PowerShell, CMD, Bash etc. Der aktuelle Prozess kann aber auch eine andere Anwendung sein, zum Beispiel Ihre eigene. Jeder untergeordnete Prozess, der aus dem aktuellen Prozess gestartet wird, übernimmt die Umgebungsvariablen dieses Prozesses. Die Umgebungsvariablen werden entfernt, sobald der Prozess endet. Das bedeutet, dass Sie die Umgebungsvariablen jedes Mal neu konfigurieren müssen, wenn Sie eine neue Shell öffnen.
    Und genau so werden Umgebungsvariablen unter macOS und in Linux-Distributionen gespeichert.
  • In der Benutzer-Registry. Die Umgebungsvariable steht allen Prozessen zur Verfügung, die vom Benutzenden gestartet werden. Niemand sonst kann auf diese Umgebungsvariablen zugreifen (ohne entsprechend erhöhte Berechtigungen).
  • In der Computer-Registry. Die Umgebungsvariablen stehen allen Benutzenden und Prozessen zur Verfügung, aber um die Umgebungsvariablen für den Computer einrichten zu können, sind erhöhte Berechtigungen erforderlich.

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.

Wo sollten Sie Umgebungsvariablen speichern? 

Wenn Sie Ihre Anwendung aus einer Shell ausführen und nicht möchten, das die Umgebungsvariablen verfügbar bleiben, können Sie die Umgebungsvariablen für den aktuellen Prozess einrichten. Wenn die Verfügbarkeit der Umgebungsvariablen ausdrücklich gewollt ist, sollten Sie sie in der Benutzer-Registry speichern. Wenn Sie die Umgebungsvariablen nicht nur für sich selbst oder eine andere Person, sondern für alle Benutzenden konfigurieren möchten, speichern Sie sie in der Computer-Registry.

Umgebungsvariablen mit PowerShell einrichten

Über PowerShell Core wird PowerShell auch auf macOS und Linux-Distributionen unterstützt. Unter Windows ist die Windows PowerShell vorinstalliert und wird als bevorzugte Shell für die Windows-Plattform empfohlen. Die folgenden cmdlets zum Konfigurieren von Umgebungsvariablen funktionieren unter Windows, macOS und Linux.

Die folgende Methode zum Einrichten von Umgebungsvariablen in PowerShell mit der Variablen $Env ist die gängigste und einfachste:

 

 

$Env:TWILIO_ACCOUNT_SID = '<YOUR_ACCOUNT_SID>'

Fügen Sie nach $Env einen Doppelpunkt ein, dann den Namen der Umgebungsvariablen, gefolgt von einem Gleichheitszeichen und dem Wert, den Sie verwenden möchten. Damit wird die Umgebungsvariable für den aktuellen Prozess eingerichtet und von jedem untergeordneten Prozess, den Sie aus dieser Shell starten, übernommen.

Die beiden folgenden Alternativen sind weniger geläufig, führen aber zu demselben Ergebnis:

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')

Damit die Umgebungsvariablen über mehrere Shell-Instanzen hinweg Bestand haben, können Sie wie folgt die cmdlets in Ihrem Profilskript speichern bzw. unter Windows in der Benutzer- oder Computer-Registry:

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.

Die beiden Befehle oben führen unter macOS und Linux zu einem no-op, weil es dort weder Benutzer- noch Computer-, sondern nur Prozess-Umgebungsvariablen gibt. Weitere Details finden Sie in der Dokumentation zu PowerShell-Umgebungsvariablen von Microsoft.

Umgebungsvariablen mit CMD einrichten

Cmd bwz. cmd.exe und die Eingabeaufforderung werden automatisch mit Windows installiert. In der Regel sollten Sie PowerShell nutzen, aber wenn das nicht möglich ist, finden Sie hier eine Beschreibung, wie Sie Umgebungsvariablen über cmd und Batch-Dateien einrichten können.

Sie können eine Umgebungsvariable wie folgt mit dem Befehl set einrichten:

set TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Mit diesem Befehl wird die Umgebungsvariable für den aktuellen Prozess eingerichtet und von allen untergeordneten Prozessen übernommen. Sobald Sie allerdings cmd schließen, gehen die Umgebungsvariablen verloren. 

Damit die Umgebungsvariablen über den Prozess hinaus bestehen bleiben, können Sie sie mithilfe des Befehls setx in der Benutzer- und/oder Computer-Registry speichern.

# 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.

Diese Befehle bieten weitere Möglichkeiten, die detailliert im Beitrag Befehl einrichten und in der Dokumentation zum setx-Befehl beschrieben sind.

Umgebungsvariablen mithilfe der grafischen Benutzeroberfläche einrichten

Die Einrichtung von Umgebungsvariablen mithilfe der GUI ist in Windows hinter einer Reihe von Dialogebenen versteckt. Zum Öffnen der entsprechenden Oberfläche müssen Sie zunächst den Windows-Befehl „Ausführen“ öffnen. Drücken Sie dazu gleichzeitig die Tasten Windows und R auf Ihrer Tastatur. Geben Sie sysdm.cpl in das Eingabefeld ein und drücken Sie Enter oder Ok.

run-dialog.png

Klicken Sie im darauf angezeigten Fenster auf die Registerkarte Advanced (Erweitert) und danach auf die Schaltfläche Environment Variables (Umgebungsvariablen) unten rechts im Fenster.

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

Das Fenster ist in zwei verschiedene Bereiche unterteilt. In einem Bereich befinden sich die nutzerspezifischen Umgebungsvariablen. Diese gelten nur für einen spezifischen Nutzer, nicht jedoch für andere. Der andere Bereich enthält die systemweiten Variablen, die allen Nutzern zur Verfügung stehen.

Klicken Sie auf die Schaltfläche New (Neu) unter dem nutzerspezifischen Bereich, um eine nutzerspezifische Variable zu erstellen. In der Befehlszeile können Sie nun den Namen Ihrer Variable sowie den Wert angeben. Erstellen Sie eine neue Variable mit dem Namen TWILIO_ACCOUNT_SID und kopieren Sie Ihre Twilio-Konten-SID aus der Konsole. Drücken Sie in der Befehlszeile auf Ok, um die Variable zu erstellen. Drücken Sie anschließend im Fenster „Umgebungsvariablen“ auf Ok. Nun ist alles eingerichtet.

new-dialog.png

Als Funktionstest können Sie die Eingabeaufforderung öffnen, indem Sie Windows + R drücken und cmd.exe eingeben. Falls die Eingabeaufforderung bereits geöffnet ist, führen Sie einen Neustart durch, damit die Änderungen übernommen werden. Führen Sie in der Eingabeaufforderung folgenden Befehl aus:

echo %TWILIO_ACCOUNT_SID%

Daraufhin sehen Sie den von Ihnen in der Umgebungsvariable gespeicherten Wert.

windows-cmd-dialog.png

env-Dateien verwenden

Manchmal müssen Sie nur eine Umgebungsvariable für ein einziges Projekt festlegen. In diesem Fall sind .env-Dateien eine gute Lösung. Dabei handelt es sich um Dateien in Ihrem Projekt, in der Sie die Umgebungsvariablen festlegen. Anschließend nutzen Sie eine Bibliothek für Ihre entsprechende Programmiersprache, um die Datei zu laden, die dynamisch die Variablen definiert.

Für die meisten Programmiersprachen gibt es Bibliotheken zum Laden dieser Dateien. Hier einige Beispiele:

Erstellen Sie eine .env-Datei in Ihrem Projektordner (normalerweise im Stammverzeichnis) und fügen Sie die Schlüssel-Wert-Paare ein. Das sieht folgendermaßen aus:

TWILIO_ACCOUNT_SID=<YOUR_ACCOUNT_SID>

Nun müssen Sie nur noch die entsprechende Bibliothek einbinden und können dann die Umgebungsvariable verwenden. In Node.js sieht der entsprechende Code zum Beispiel so aus:

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.

Cloud-Anbieter

Das Festlegen von Umgebungsvariablen auf Ihrem lokalen Entwicklungscomputer oder einer VM ist aber nur ein Teil der Arbeit. Was passiert, wenn Sie Ihre Anwendung in einer Cloud-Umgebung wie Heroku, Azure oder AWS hosten oder in einen Docker-Container packen? Kein Problem, denn zum Glück unterstützen alle diese Anbieter Möglichkeiten zum Definieren von Umgebungsvariablen.

Wenn Sie Ihren Cloud-Host in dieser Liste nicht finden können, bedeutet das nicht, dass es keine Möglichkeit gibt, Umgebungsvariablen zu konfigurieren. Überprüfen Sie die Dokumentation, um weitere Informationen zu erhalten.

Zusammenfassung

Das war es schon! Jetzt können Sie Umgebungsvariablen festlegen und somit alle umgebungsbasierten Konfigurationswerte aus Ihrem Code lösen, damit er flexibler und sicherer wird.

Achten Sie jedoch darauf, dass diese Werte weiterhin in Nur-Text gespeichert werden. Möchten Sie sehr sensible Werte speichern, sollten Sie eine Speicherlösung für Geheimnisse wie Vault in Betracht ziehen.

Wenn Sie Fragen haben oder mir Ihre aktuelle Entwicklung zeigen möchten, freue ich mich über Ihre E-Mail an: dkundel@twilio.com. Alternativ können Sie mich auf X (ehemals Twitter) @dkundel erreichen. Ich bin gespannt, von Ihren Entwicklungen zu hören.