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:
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?
„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.
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?
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 .
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):
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).
Zainicjuj aplikację beanstalk (użyłem do tego eb init(EB CLI)).
Odczytaj odpowiednie dane konfiguracyjne z bazy danych RDS (nazwa DB, nazwa hosta, port itp.). Użyłem aws rds describe-db-instancesdo tego.
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.
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).
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.
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)).
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ń).
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 ...
Odpowiedź od wsparcia AWS :
źródło
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):
aws ec2 create-security-group
(AWS CLI) i powiązać go z instancją RDS za pomocąaws rds modify-db-instance
(AWS CLI).eb init
(EB CLI)).aws rds describe-db-instances
do tego.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.aws elasticbeanstalk describe-configuration-settings
(AWS CLI).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.aws rds modify-db-instance
(AWS CLI)).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ń).
źródło
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:
źródło
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
źródło
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 ...
źródło