8

Jestem całkiem nowy w Elastic Beanstalk i niezbyt biegły w administrowaniu serwerem, ale muszę skonfigurować projekt Django na Elastic Beanstalk łączący się z zewnętrzną bazą danych MySQL RDS.Uprawnienia do EC2 stworzonego przez Elastic Beanstalk łączącego się z zewnętrznym RDS

Stworzyłem oddzielną bazę danych MySQL RDS i mogę bez problemu łączyć się z nią przy użyciu Sequel Pro na moim komputerze. Następnie mam projekt Django, który próbuję umieścić w Elastic Beanstalk, ale niestety bez powodzenia. Jeśli uruchomię lokalny serwer Django z mojego komputera, projekt będzie dostępny do przeglądania i Amazon RDS MySQL będzie dostępny. Jednak, gdy biegnę

eb deploy 

uzyskać

django.db.utils.OperationalError: (2003, "Can't connect to MySQL server 
on 'myapp-staging.xxx.eu-west-1.rds.amazonaws.com' (110)") 
(ElasticBeanstalk::ExternalInvocationError) 

Jeśli mogę się zalogować do serwera EC2 poprzez SSH

eb ssh 

a następnie sprawdzić otwarte porty z

netstat -lntu 

Nie widzę portu 3306 MySQL, więc ja zgadnij, że jest zablokowany przez zaporę ogniową.

To co próbowałem dotyczących uprawnienia:

  1. Poszedłem do RDS Dashboard -> Grupy Bezpieczeństwa i stworzył MojaApl-mysql-security-grupa z EC2 grupy zabezpieczeń typu połączenia skierowaną do grupy zabezpieczeń EC2 używane przez elastyczne Instancja Beanstalk EC2 "awseb-e -...".
  2. Poszedłem do EC2 -> Grupy bezpieczeństwa i "awseb-e -..." Ustawiłem przychodzący port MySQL ze źródłem 0.0.0.0/0
  3. Poszedłem do pulpitu VPC -> Grupy zabezpieczeń i stworzył moją aplikację -mysql-security-group z wejściowymi regułami portu MySQL ze źródłem 0.0.0.0/0.

Potem próbowałem ponownie wdrożyć, ponownie uruchomić serwery, a nawet przebudować środowisko, ale nic nie pomogło. Port 3306 MySQL nadal nie jest otwarty w instancjach EC2 utworzonych przez Elastic Beanstalk.

Co robię źle lub czego brakuje?

Odpowiedz

7

Port MySQL 3306 jest otwierany tylko w instancji RDS (nie w instancji EC2). Tak więc, jeśli na przykład sprawdzić EC2, nie powinien słuchać na porcie 3306.

miejsca te można zrobić, aby sprawdzić RDS działa:

  • Sprawdź EC2 instancji połączenia z RDS.
    • SSH dla Twojej instancji (eb ssh) i uruchom telnet myapp-staging.xxx.eu-west-1.rds.amazonaws.com 3306. Może być konieczne najpierw zainstalowanie telnet ().
    • Jeśli to się uda, sprawdź swoją aplikację.
    • Jeśli nie, sprawdź następny punkt.
  • Upewnij się, że RDS i umieszczenie EC2 jest poprawna:
    • Dla prywatnych tylko RDS dostępu:
      • Upewnij się, że są w tym samym VPC i zezwolić na połączenie przychodzące w RDS z IP VPC za do 3306. Aby uzyskać lepszą wydajność, użyj adresu IP zamiast nazwy grupy zabezpieczeń.
      • Jeśli są na innej VPC, możesz utworzyć VPC Peering.
    • Dla publiczne RDS dostępu:
      • same jak powyżej, umożliwiają połączenie przychodzące z adresu IP VPC-tych.
  • Upewnij instancji EC2 są dozwolone, aby połączenie wychodzące do portu 3306 w grupie zabezpieczeń EC2.
  • Upewnij się, że Twój host EC2 nie odrzucił zasady 3306 w iptables.
  • Jeśli twoje EC2 i RDS w różnych VPC i używasz prywatnego adresu IP dla EC2, sprawdź serwer NAT. Upewnij się, że port 3306 jest proxified.
+0

Początkowo EC2 z Elastic Beanstalk nie należało do tego samego VPC co RDS. Tak więc odtworzyłem Elastic Beanstalk w tym samym VPC co RDS przy użyciu przełącznika --vpc w komendzie eb create. Aby rozwiązać problem z dalszym połączeniem, musiałem dodać VPC IP do połączenia przychodzącego dla RDS. Dzięki za twoje obszerne wyjaśnienie. Mam nadzieję, że pomoże to także innym użytkownikom AWS. –