Wie setzt man Umgebungsvariablen

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

Copy of A01 Blog Product

Hallo und danke fürs Lesen! Dieser Blogpost ist eine Übersetzung von How To Set Environment Variables.

Es gibt Dinge, die wir wirklich nicht in unserem Code preisgeben sollten. Meist sind das Konfigurationswerte, die von der Umgebung abhängen, z. B. Debugging-Flags oder Zugriffstokens für APIs wie Twilio. Umgebungsvariablen sind hier eine gute Lösung und können in den meisten Sprachen 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, die die Pfade zu allen Ordnern enthält, 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 in der PATH-Variable für die ausführbare Datei angegebenen Verzeichnisse.

Neben den integrierten Variablen haben wir auch die Möglichkeit, unsere eigenen Umgebungsvariablen zu definieren. Gebunden an unsere Umgebung eignen sie sich bestens für beispielsweise API-Zugriffstokens. Sie können eine Variable auf einen Wert auf Ihrem Entwicklungscomputer und einen anderen für Ihre Produktionsentwicklung festlegen – ganz ohne if-Anweisungen oder spezielle Konfigurationsdateien.

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

Windows-Umgebungsvariablen

Die Umgebungsvariablen sind in Windows aufgrund mehrerer Dialogebenen recht versteckt. Wie wir es von Windows gewohnt sind, werden die Umgebungsvariablen mithilfe einer grafischen Benutzeroberfläche festgelegt. 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 Erweitert und danach auf die Schaltfläche Umgebungsvariablen unten rechts im Fenster.

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

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

Klicken Sie auf die Schaltfläche 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-Konto-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, schließen und öffen Sie diese, 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

macOS und Linux-Distributionen

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 in unserem Beispiel verwenden. Die Schritte ähneln sich jedoch für andere Shells wie zsh oder fish.

Wir müssen den Exportbefehl im folgenden Format nutzen, um eine Umgebungsvariable festzulegen:

export KEY=value

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

export TWILIO_ACCOUNT_SID=youraccountsid

Ersetzen Sie youraccountsid durch Ihre Konto-SID aus Ihrer 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

.env

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 eine Datei 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.

Es stehen für die meisten Programmiersprachen Bibliotheken zur Verfügung, um diese Dateien zu laden. Hier einige Beispiele:

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

TWILIO_ACCOUNT_SID=youraccountsid

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

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

Da Sie wahrscheinlich die Umgebungsvariablen nicht in einem Repository festschreiben möchten, müssen Sie die .env-Datei zu .gitignore hinzufügen, um sie nicht versehentlich zu senden.

Cloud-Anbieter

Das Festlegen von Umgebungsvariablen auf Ihrem lokalen Entwicklungscomputer oder einer VM ist aber nur ein Teil der Arbeit. Was passiert, wenn wir unsere 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. Anweisungen finden Sie in den jeweiligen Dokumentationen:

Wenn Sie Ihren Cloud-Host in dieser Liste nicht finden können, bedeutet dies 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 Siein besonderem Maße sensible Werte speichern, sollten Sie sich nach einer geheimen Speicherlösung wie Vault umsehen.

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 über meinen Twitter-Account@dkundel erreichen. Ich kann kaum abwarten, zu sehen, was Sie entwickeln!