Jak powiązać istniejącą instancję RDS ze środowiskiem Elastic Beanstalk?

22

Utworzyłem instancję RDS przed utworzeniem środowiska Elastic Beanstalk. Obie pracują bez problemu, ale chciałbym, aby były ze sobą połączone i miały parametry RDS dostępne za pośrednictwem RDS_*zmiennych środowiskowych.

Strona konfiguracji Elastic Beanstalk mówi:

Nie masz bazy danych.  Możesz utworzyć nową bazę danych RDS lub użyć istniejącej bazy danych.

Chociaż pierwsze łącze tworzy instancję RDS w miejscu i łączy ją z bieżącym środowiskiem, drugie łącze po prostu przekierowuje do tej strony dokumentacji. , co niestety wyjaśnia tylko, jak utworzyć nową instancję RDS, ale nie jak połączyć istniejącą.

Jak mogę powiązać istniejącą instancję RDS z moim środowiskiem Elastic Beanstalk?

Benzoes
źródło

Odpowiedzi:

24

„Wybrana” odpowiedź jest poprawna, ale chciałem dodać dodatkowe informacje, ponieważ większość osób korzystających jednocześnie z EB i RDS powinna mieć te same wymagania - nawet jeśli jeszcze tego nie wiedzą.

Pierwsze pytanie : dlaczego chcesz, aby instancja RDS istniała poza środowiskiem EB? Odpowiedź : Aby czas życia instancji RDS nie był powiązany z czasem życia środowiska EB. tzn. kiedy usuwasz środowisko, nie chcesz z nim niszczyć bazy danych. Istnieje bardzo niewiele powodów, dla których warto powiązać instancję RDS ze środowiskiem.

Problem z konfiguracją RDS niezależnie od EB polega na tym, że zmienne RDS_ * nie są automatycznie zapełniane, dlatego trzeba je odzyskać i wypełnić je samodzielnie za pomocą konsoli internetowej lub rozszerzeń .ebext. Nie zaleca się jednak dodawania poświadczeń do kodu, ponieważ może to stanowić lukę w zabezpieczeniach.

Ale następnym problemem jest to, że jeśli chcesz programowo tworzyć środowiska (takie jak wdrożenia niebiesko-zielone z zerowym czasem przestoju), to potrzebujesz rozwiązania, w którym za każdym razem zapełnisz wrażliwe wartości RDS (np. Hasło). Niestety wymaga to zejścia dalej w dół stosu AWS i skorzystania z szablonu CloudFormation.

Idealnym rozwiązaniem jest rozszerzenie do EB, dzięki czemu wspomniany w pytaniu link „użyj istniejącej bazy danych” faktycznie pozwala ręcznie powiązać istniejącą bazę danych RDS, a następnie automatycznie zapełnić zmienne środowiskowe RDS_ *, zamiast przekierowywać do nieprzydatnej dokumentacji . Obsługa AWS powiedziała, że ​​zostało to zgłoszone jako żądanie funkcji, ale oczywiście nie podano ram czasowych.

rgareth
źródło
rok później i nadal tak jest?
lifeofguenter
1
Nadal sprawa o ile mi wiadomo.
rgareth
Jak podbić ten AWS?
Mateusz
rok później jest nadal taki sam.
Karan Kumar
Kroki dodawania rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/… (tylko dla kompletności dla osób takich jak ja szukających go) Nie tworzysz konfiguracji środowiska i nie ładujesz jej przez plik konfiguracyjny podczas tworzenia. To powinno dodać zmienne env, więc dopóki się nie zmienią, to powinno być w porządku?
Manuel
18

Odpowiedź od wsparcia AWS :

Aby powiązać istniejącą bazę danych ze środowiskiem EB, musisz zrobić jej migawkę za pomocą konsoli zarządzania, a następnie wybrać opcję „Utwórz nową bazę danych RDS” w warstwie danych. Wydaje się, że nie ma sposobu na powiązanie działającej instancji RDS z istniejącym środowiskiem EB bez uruchamiania nowej z migawki ze względu na sposób, w jaki instancja RDS jest powiązana ze stosem Cloudformation środowiska Beanstalk. Jeśli zrobisz migawkę aktualnej instancji RDS, możesz ją uruchomić od nowa w EB, jeśli chcesz.

Jeśli chcesz, aby instancja RDS istniała poza środowiskiem, możesz po prostu podać parametry połączenia jako zmienne środowiskowe za pośrednictwem konsoli EB: Konfiguracja -> Warstwa sieci -> Konfiguracja oprogramowania. Następnie możesz odczytać zmienną środowiskową za pomocą PHP .

Benzoes
źródło
Podjąłem drugie podejście, definiując zmienne środowiskowe o nazwach RDS_ *, aby zachować zgodność z konwencją. Grupy zabezpieczeń są ustawione dość ciasno, ale nadal nieco luźno jest umieścić hasło DB w zmiennej środowiskowej.
Joseph Sheedy
@velotron To samo dla mnie, ale przyzwyczaiłem się!
Benjamin
2

Potrzebowałem tego ostatnio, a także chciałem zautomatyzować kroki za pomocą interfejsu AWS CLI / EB CLI. W każdym razie oto podstawowe kroki, które wykonałem (zakładając, że już utworzyłeś instancję RDS):

  1. Upewnij się, że masz inną konfigurację grupy zabezpieczeń dla instancji RDS (nie domyślnej grupy VPC). Możesz do tego użyć aws ec2 create-security-group(AWS CLI) i powiązać go z instancją RDS za pomocą aws rds modify-db-instance(AWS CLI).
  2. Zainicjuj aplikację beanstalk (użyłem do tego eb init(EB CLI)).
  3. Odczytaj odpowiednie dane konfiguracyjne z bazy danych RDS (nazwa DB, nazwa hosta, port itp.). Użyłem aws rds describe-db-instancesdo tego.
  4. Za pomocą tych danych ustaw RDS_*zmienne środowiskowe w instancji EB podczas tworzenia środowiska (lub wdrażania środowiska później). Możesz to zrobić za pomocą eb create/ eb deploy(EB CLI). Podczas tworzenia środowiska początkowo zostanie ono zdegradowane, ponieważ grupy zabezpieczeń mające dostęp do bazy danych RDS nie są poprawnie skonfigurowane.
  5. Uzyskaj odpowiednie grupy zabezpieczeń z konfiguracji EB. Potrzebujesz tej dla grupy automatycznego skalowania i dla modułu równoważenia obciążenia elastycznego. Możesz do tego użyć aws elasticbeanstalk describe-configuration-settings(AWS CLI).
  6. Autoryzuj grupę automatycznego skalowania dla ruchu przychodzącego do bazy danych dla grupy zabezpieczeń skonfigurowanej w kroku 1. Użyłem do tego aws ec2 authorize-security-group-ingress(AWS CLI), która korzysta z grup zabezpieczeń VPC (nie grup zabezpieczeń DB). Prawdopodobnie możesz to zrobić z grupami zabezpieczeń DB, jeśli są one obsługiwane w twoim regionie. Podczas konfigurowania reguły ruchu przychodzącego upewnij się, że używasz właściwego protokołu i portu dla silnika bazy danych.
  7. Dodaj grupę elastycznego modułu równoważenia obciążenia do grup zabezpieczeń instancji RDS (ponownie używając aws rds modify-db-instance(AWS CLI)).
  8. Uruchom ponownie lub ponownie zainstaluj aplikację Elastic Beanstalk (np. Używając eb deploy(EB CLI)). Musiałem przeprowadzić ponowne wdrożenie, ponieważ uruchamiam migracje we wdrożeniach.

To w większości to. Teraz powinieneś być w stanie skalować w górę / w dół instancje RDS bez dbania o instancje EB, pod warunkiem, że nazwa hosta i poświadczenia DB pozostaną takie same. Przy takim podejściu możesz także przeprowadzać wdrożenia w kolorze niebieskim / zielonym (ale może być konieczne wykonanie dodatkowych kroków, aby również odwołać dostęp do grupy zabezpieczeń).

Torsten
źródło
0

Najłatwiej dodać istniejącą grupę zabezpieczeń do instancji EB EC2 według konfiguracji, używając prostego pliku opisanego w https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/ security-configuration / securitygroup-addexisting.config

Na przykład:

$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: rds-launch-wizard-1
pba
źródło
0

Napotkałem ten sam problem i naprawiłem go, wykonując następujące czynności:

1) Przejdź do instancji EC2 i zanotuj przykład grupy zabezpieczeń „sg-121212121212”

2) PRZEJDŹ do RDS Security Group ad = i ruch przychodzący

3) Edytuj regułę, zaznacz cały ruch i dodaj nową grupę zabezpieczeń EBS „SG-121212121212”

Mam nadzieję, że to pomoże

Vaquar Khan
źródło
-2

utwórz RDS w Elastic; doda nową poprawną grupę zabezpieczeń; modyfikować grupę zabezpieczeń istniejącego RDS; ustaw prawidłowy ciąg połączenia w konfiguracji sieci i cała praca ...

max
źródło