2015-12-10 11 views
5

Próbuję ustawić zmienne środowiskowe z danymi EC2s użytkownika, ale nic nie mogę zrobić, wydaje się działaćJak ustawić zmienne środowiskowe na przykład EC2 przez Użytkownika danych

oto skrypty danych użytkownika Próbowałem

#!/bin/bash 
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> /env.sh 
source /env.sh 

I jeszcze:

#!/bin/bash 
echo "#!/bin/bash" >> /env.sh 
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-67323523.us-east-1.elb.amazonaws.com" >> /env.sh 
chmod +x /env.sh 
/env.sh 

Oboje absolutnie nic nie robią, a jeśli się zaloguję i wydam polecenie source /env.sh lub /env.sh, to działa. więc to musi być coś zabronionego, co próbuję zrobić.

Oto wyjściowy /var/log/cloud-init-output.log użyciu -e -x

+ echo 'export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com' 
+ source /env.sh 
++ export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com 
++ HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com 

Mimo echo $HOST_URL jest pusty

Zgodnie z wnioskiem, pełna UserData skrypt

#!/bin/bash 
set -e -x 
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com" >> /env.sh 
source /env.sh 
/startup.sh staging 2649 
+0

Próbujesz ustawić zmienne środowiskowe dla skryptów uruchamianych później na łatwość danych, czy chcesz zmienne dostępne po zalogowaniu się do serwera przez ssh ? Czy jesteś pewien, że używany AMI obsługuje skrypty danych użytkowników? –

+0

1: Próbuję ustawić dane użytkownika do aplikacji uruchamianej po tym skrypcie. 2: tak skrypty danych użytkownika działają, jest to tylko dodatek do skryptu, który działa po tym – Gleeb

+0

Aby być jasnym, skrypt, do którego mają być dostępne zmienne, jest również wywoływany w twoim skrypcie danych użytkownika? –

Odpowiedz

8

Skrypt danych użytkownika w EC2 wykonuje się po rozruchu w swoim własnym procesie. Zmienne środowiskowe są ustawiane w tym procesie i znikają po zakończeniu procesu. Nie zobaczysz zmiennych środowiskowych w innych procesach, tj. Powłoki logowania lub innych programów.

Będziesz musiał wymyślić sposób, aby uzyskać te zmienne środowiskowe w programie wymaganym przez program.

Gdzie są potrzebne te zmienne? W "/startup.sh inscenizacja 2649"?

EDIT

Spróbuj tego:

#!/bin/bash 
set -e -x 
export HOST_URL="checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com" 
/startup.sh staging 2649 

Następnie edytować "/startup.sh" i umieścić następującą linię na górnej:

echo $HOST_URL > /tmp/var 

Boot instancji, a następnie wklej/tmp/var tutaj.

+0

startup.sh uruchamia aplikację szyn, wewnątrz aplikacji szyn istnieje użycie tej zmiennej env – Gleeb

+0

Dodawanie w powyższej odpowiedzi dla lepszego formatowania. – Ziffusion

0

Po wykonaniu czynności w skrypcie danych użytkownika proces zostaje zakończony. Tak więc dowolna zmienna środowiskowa, którą eksportujesz, nie pojawi się w następnym procesie. Jednym ze sposobów jest umieszczenie eksportów w pliku .bashrc, aby był dostępny również w następnej sesji.

echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> ~/.bashrc 
3

Uważam, że jest to całkiem łatwy sposób na ustawienie zmiennych środowiskowych dla wszystkich użytkowników korzystających z danych użytkownika.Pozwala mi to skonfigurować aplikacje tak samo AMI może pracować z wieloma scenariuszami:

#!/bin/bash 
echo export DB_CONNECTION="some DB connection" >> /etc/profile 
echo export DB_USERNAME="my user" >> /etc/profile 
echo export DB_PASSWORD="my password" >> /etc/profile 

Teraz wszyscy użytkownicy będą mieli DB_CONNECTION, DB_USERNAME i DB_PASSWORD ustawiony jako zmiennych środowiskowych.

1

Możesz dodać kolejny skrypt powłoki w /etc/profile.d/yourscript.sh, który będzie zawierał zestaw zmiennych środowiskowych, które chcesz dodać.

Ten skrypt będzie działał przy każdym uruchomieniu, a zmienna będzie dostępna dla wszystkich użytkowników.

#!/bin/sh 
echo 'export AWS_DEFAULT_REGION=ap-southeast-2' > ~/myconfiguration.sh 
chmod +x ~/myconfiguration.sh 
sudo cp ~/myconfiguration.sh /etc/profile.d/myconfiguration.sh 

Powyższy kod tworzy skrypt, aby ustawić zmienną środowiskową dla AWS domyślnego regionu i kopiuje go do profile.d.

 

0

Jednym z bardziej konfigurowalnego podejścia do definiowania zmiennych środowiskowych dla instancji EC2, jest użycie EC2 Parameter Store. Takie podejście ułatwi zarządzanie różnymi parametrami dla dużej liczby instancji EC2, zarówno zaszyfrowanych przy użyciu AWS KMS, jak również w postaci zwykłego tekstu. Umożliwia także zmianę wartości parametrów przy minimalnych zmianach na poziomie instancji EC2. Kroki są następujące.

  • Definiowanie parametrów ciągu (zaszyfrowanych za pomocą KMS lub Unencrypted) w EC2 Systems Manager Składnica parametrów.
  • W roli IAM, którą przyjmuje EC2, podaj wymagane uprawnienia dostępu do składnicy parametrów.
  • Używając poleceń AWS CLI dla EC2 System Manager, odczytaj parametry i wyeksportuj do zmiennych środowiskowych w sekcji Dane użytkownika, używając poleceń AWS CLI i AWS i controlling command output zgodnie z wymaganiami.

np. Używanie polecenia Get-Parameter do pobierania parametru db_connection_string (niezaszyfrowany).

export DB_CONNECTION =$(aws --region=us-east-2 ssm get-parameter --name "db_connection" --query 'Value') 

Uwaga: Aby uzyskać więcej informacji na utworzenie AWS KMS Keys, definiując zaszyfrowane ciągi, zarządzanie polityką IAM & itd, patrz poniższe artykuły.

Powiązane problemy