Notatka Amazon Elastic Beanstalk mówi:
Elastic Beanstalk pozwala „otworzyć maskę” i zachować pełną kontrolę ... nawet przekazywać zmienne środowiskowe przez konsolę Elastic Beanstalk.
http://aws.amazon.com/elasticbeanstalk/
Jak przekazać inne zmienne środowiskowe oprócz tej w konfiguracji Elastic Beanstalk?
Odpowiedzi:
Jako uwaga dla każdego, kto skorzysta z tej
.ebextensions/*.config
drogi: obecnie możesz dodawać, edytować i usuwać zmienne środowiskowe w interfejsie internetowym Elastic Beanstalk.Zmienne znajdują się w Konfiguracja → Konfiguracja oprogramowania:
Tworzenie zmiennych
.ebextensions
jak w odpowiedzi Onemy nadal działa.Może to być nawet preferowane rozwiązanie, np. Jeśli później będziesz wdrażać w innym środowisku i boisz się zapomnieć o ich ręcznym ustawieniu lub jeśli zgadzasz się na przekazanie wartości do kontroli źródła. Używam mieszanki obu.
źródło
ENV["CUSTOM_ENV"]
wróci"something-something"
.Ograniczające jest tylko 5 wartości lub możesz chcieć mieć niestandardową nazwę zmiennej środowiskowej. Możesz to zrobić za pomocą plików konfiguracyjnych. Utwórz katalog w katalogu głównym projektu o nazwie
.ebextensions /
Następnie utwórz plik o nazwie environment.config (ten plik można nazwać dowolnie, ale musi mieć rozszerzenie .config) i dodaj następujące wartości
Po wdrożeniu aplikacji zobaczysz tę nową wartość w obszarze Szczegóły środowiska -> Edytuj konfigurację -> Kontener
aby uzyskać więcej informacji, zapoznaj się z dokumentacją tutaj: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-options
Aktualizacja
Aby zapobiec zatwierdzaniu wartości repozytorium, takich jak klucze API, wpisy tajne itp., Możesz umieścić wartość zastępczą.
Później możesz przejść do panelu administracyjnego AWS (Szczegóły środowiska -> Edytuj konfigurację -> Kontener) i tam zaktualizować wartości. Z mojego doświadczenia wynika, że wartości te nie zmieniają się po kolejnych wdrożeniach.
Aktualizacja 2 Jak stwierdził @Benjamin w swoim komentarzu, ponieważ nowy wygląd i styl zostały wprowadzone 18 lipca 2013 r., Możliwe jest zdefiniowanie dowolnej liczby zmiennych środowiskowych bezpośrednio z konsoli:
Configuration > Software Configuration > Environment Properties
źródło
command: "nrsysmond-config --set license_key={$NR_INSTALL_KEY}"
W 2016 Java8 Tomcat8 AMI, ElasticBeanstalk nie ustawia zmiennych środowiskowych z konfiguracji internetowej. Naprawdę zamiast tego ustawiają właściwości jvm -D.
- „Następujące właściwości są przekazywane do aplikacji jako zmienne środowiskowe. Więcej informacji”.
To stwierdzenie jest niepoprawne w przypadku ami Java Tomcat. Amazon nie ustawia ich jako zmiennych środowiskowych. Są one ustawiane jako właściwości systemowe przekazywane w wierszu poleceń do serwera Tomcat jako właściwość -D dla jvm. Metoda w Javie do pobierania zmiennych środowiskowych nie jest taka sama, jak w przypadku pobierania właściwości. System.getenv vs System.getProperty
Wrzuciłem ssh do pudełka i sprawdziłem, że zmienna środowiskowa nigdy nie została ustawiona. Jednak w dziennikach tomcat widzę, że właściwość -D jest ustawiona.
Zmieniłem kod, aby sprawdzić teraz obie lokalizacje jako obejście.
źródło
Amazon Linux 2017.03 v2.5.4 with Java8
również nie ustawia śr.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.
Twoje zmienne nie są ustawiane w skrypcie logowania, takim jak.bashrc
. Jednak masz rację, zmienne Tomcat są przekazywane jako właściwości. (Zobacz górę połączonej strony)AWS zinterpretuje ciągi szablonów CloudFormation w zmiennych środowiskowych. Możesz użyć tego, aby uzyskać dostęp do informacji o środowisku EB w aplikacji:
W interfejsie internetowym AWS następujące elementy zostaną ocenione jako nazwa twojego środowiska (zwróć uwagę na tylne znaczniki):
Lub możesz użyć
.ebextensions/*.config
szablonu CloudFormation i zawinąć go w tylne znaczniki (`):źródło
Alternatywnie możesz użyć Elastic Beanstalk CLI do ustawiania zmiennych środowiskowych.
Aby ustawić zmienną środowiskową:
eb setenv FOO=bar
Aby wyświetlić zmienne środowiskowe:
eb printenv
źródło
Szczegóły środowiska -> Edytuj konfigurację -> Kontener
źródło
Wydaje się, że jest to jedyny sposób na ustawienie ENV z wartościami dynamicznymi w łodydze fasoli. Wymyśliłem obejście, które działa w mojej konfiguracji multi-docker:
1) Dodaj to do swojego Dockerfile przed zbudowaniem + przesłaniem do repozytorium ECS:
2) W pliku Dockerrun.aws.json utwórz wolumin:
3) Zamontuj objętość do pojemnika
4) W pliku .ebextensions / options.config dodaj blok container_commands w następujący sposób:
5) eb deploy, a twój ENVS powinien być dostępny w twoim kontenerze docker
Możesz dodać więcej ENV, dodając więcej container_commands, takich jak:
Mam nadzieję że to pomoże!
źródło
X: '
{"Ref": "MyCache"}'
wartość nie jest analizowana (wartość to tylko „{"Ref": "MyCache"}
”), gdy kontener próbuje uzyskać do niego dostęp. Dzięki temu możesz mieć takie zmienne dynamiczne.