Der Amazon Elastic Beanstalk Klappentext sagt:
Mit Elastic Beanstalk können Sie "die Haube öffnen" und die volle Kontrolle behalten ... sogar Umgebungsvariablen über die Elastic Beanstalk-Konsole übergeben.
http://aws.amazon.com/elasticbeanstalk/
Wie werden andere Umgebungsvariablen als die in der Elastic Beanstalk-Konfiguration übergeben?
Antworten:
Als Heads-up für alle, die diesen
.ebextensions/*.config
Weg nutzen: Heutzutage können Sie Umgebungsvariablen in der Elastic Beanstalk-Weboberfläche hinzufügen, bearbeiten und entfernen .Die Variablen befinden sich unter Konfiguration → Softwarekonfiguration:
Das Erstellen der Vars
.ebextensions
wie in Onemas Antwort funktioniert immer noch.Es kann sogar vorzuziehen sein, z. B. wenn Sie später in einer anderen Umgebung bereitstellen und Angst haben, das manuelle Festlegen zu vergessen, oder wenn Sie die Werte für die Quellcodeverwaltung übernehmen können. Ich benutze eine Mischung aus beiden.
quelle
ENV["CUSTOM_ENV"]
würde zurückkehren"something-something"
.Nur 5 Werte sind einschränkend, oder Sie möchten möglicherweise einen benutzerdefinierten Umgebungsvariablennamen. Sie können dies mithilfe der Konfigurationsdateien tun. Erstellen Sie ein Verzeichnis im Stammverzeichnis Ihres Projekts mit dem Namen
.ebextensions /
Erstellen Sie dann eine Datei mit dem Namen environment.config (diese Datei kann beliebig aufgerufen werden, muss jedoch die Erweiterung .config haben) und fügen Sie die folgenden Werte hinzu
Nachdem Sie Ihre Anwendung bereitgestellt haben, wird dieser neue Wert unter Umgebungsdetails -> Konfiguration bearbeiten -> Container angezeigt
Weitere Informationen finden Sie in der Dokumentation hier: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options
Aktualisieren
Um zu verhindern, dass Ihre Repository-Werte wie API-Schlüssel, Geheimnisse usw. festgeschrieben werden, können Sie einen Platzhalterwert eingeben.
Später können Sie im AWS-Administrationsbereich (Umgebungsdetails -> Konfiguration bearbeiten -> Container) die Werte dort aktualisieren. Nach meiner Erfahrung ändern sich diese Werte nach nachfolgenden Bereitstellungen nicht.
Update 2 Wie @Benjamin in seinem Kommentar erwähnt, da der neue Look and Feel aus 18. Juli gerollt wurde, 2013 ist es möglich , eine beliebige Anzahl von Umgebungsvariablen aus der Konsole direkt zu definieren:
Configuration > Software Configuration > Environment Properties
quelle
command: "nrsysmond-config --set license_key={$NR_INSTALL_KEY}"
In Java8 Tomcat8 AMI 2016 kann ElasticBeanstalk keine Umgebungsvariablen aus der Webkonfiguration festlegen. Sie setzen stattdessen wirklich jvm -D-Eigenschaften.
- "Die folgenden Eigenschaften werden als Umgebungsvariablen an die Anwendung übergeben. Weitere Informationen."
Diese Aussage ist für Java Tomcat ami falsch. Amazon nicht gesetzt diese als Umgebungsvariablen. Sie werden als Systemeigenschaften festgelegt, die in der Befehlszeile als -D-Eigenschaft für jvm an Tomcat übergeben werden. Die Methode in Java zum Abrufen von Umgebungsvariablen ist nicht dieselbe zum Abrufen einer Eigenschaft. System.getenv vs System.getProperty
Ich ging in die Box und verifizierte, dass die Umgebungsvariable nie gesetzt wurde. In den Tomcat-Protokollen kann ich jedoch sehen, dass die Eigenschaft -D festgelegt ist.
Ich habe meinen Code geändert, um jetzt als Problemumgehung nach beiden Speicherorten zu suchen.
quelle
Amazon Linux 2017.03 v2.5.4 with Java8
setzt auch nicht env.In general, however, environment properties are passed only to the application and can't be viewed by connecting an instance in your environment and running env.
Ihre Variablen werden nicht in einem Anmeldeskript wie festgelegt.bashrc
. Sie sind jedoch korrekt. Tomcat-Variablen werden als Eigenschaften übergeben. (Siehe oben auf der verlinkten Seite.)AWS interpretiert CloudFormation-Vorlagenzeichenfolgen in Ihren Umgebungsvariablen. Sie können dies verwenden, um auf Informationen zu Ihrer EB-Umgebung in Ihrer Anwendung zuzugreifen:
In der AWS-Weboberfläche wird Folgendes als Name Ihrer Umgebung ausgewertet (beachten Sie die hinteren Häkchen):
Oder Sie können eine verwenden
.ebextensions/*.config
und die CloudFormation-Vorlage in Back Ticks (`) einschließen:quelle
Alternativ können Sie die Elastic Beanstalk-CLI verwenden, um Umgebungsvariablen festzulegen.
So legen Sie eine Umgebungsvariable fest:
eb setenv FOO=bar
So zeigen Sie die Umgebungsvariablen an:
eb printenv
quelle
Umgebungsdetails -> Konfiguration bearbeiten -> Container
quelle
Dies scheint die einzige Möglichkeit zu sein, ENVs mit dynamischen Werten in Beanstalk festzulegen. Ich habe eine Problemumgehung gefunden, die für mein Multi-Docker-Setup funktioniert:
1) Fügen Sie dies Ihrer Docker-Datei hinzu, bevor Sie es erstellen + in Ihr ECS-Repository hochladen:
2) Erstellen Sie in Ihrer Datei Dockerrun.aws.json ein Volume:
3) Montieren Sie das Volumen an Ihrem Behälter
4) Fügen Sie in Ihrer Datei .ebextensions / options.config einen container_commands-Block wie folgt hinzu:
5) eb deploy und Ihr ENVS sollten in Ihrem Docker-Container verfügbar sein
Sie können weitere ENVs hinzufügen, indem Sie weitere container_commands hinzufügen, z.
Hoffe das hilft!
quelle
X: '
{"Ref": "MyCache"}'
, wird der Wert{"Ref": "MyCache"}
standardmäßig nicht analysiert (Wert ist nur ' '), wenn der Container versucht, darauf zuzugreifen. Damit können Sie solche dynamischen Variablen haben.