8

Sono abbastanza nuovo per Elastic Beanstalk e non molto abile con l'amministrazione del server, ma ho bisogno di impostare un progetto Django su Elastic Beanstalk che si colleghi al database MySQL esterno RDS.Autorizzazioni per EC2 create da Elastic Beanstalk che si connette a RDS esterno

Ho creato un database MySQL RDS separato e posso connettermi ad esso utilizzando Sequel Pro sul mio computer senza problemi. Poi ho il mio progetto Django che cerco di mettere su Elastic Beanstalk, ma sfortunatamente senza fortuna. Se eseguo il server Django locale dal mio computer, il progetto è sfogliabile e Amazon RDS MySQL è accessibile. Tuttavia, quando ho eseguito

eb deploy 

ottengo

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

Se faccio il login al server EC2 tramite SSH

eb ssh 

e quindi controllare le porte aperte con

netstat -lntu 

Non vedo la porta 3306 di MySQL lì, quindi io Immagino che sia bloccato dal firewall.

Questo è quello che ho cercato per quanto riguarda permesso:

  1. sono andato a RDS Dashboard -> Gruppi di protezione e ha creato myapp-mysql-sicurezza-gruppo con EC2 Security Group tipo di connessione che punta al gruppo di protezione EC2 usato da Elastic Istanza Beanstalk EC2 "awseb-e -...".
  2. sono andato a EC2 -> dei gruppi di protezione e per “awseb-e -...” ho impostato la porta in ingresso MySQL con fonte 0.0.0.0/0
  3. sono andato a VPC Dashboard -> Gruppi di protezione e myapp creato -mysql-security-group con le regole di ingresso della porta MySQL con origine 0.0.0.0/0.

Poi ho provato a ridistribuire, riavviare server e anche ricostruire l'ambiente, ma nulla ha aiutato. La porta MySQL 3306 non è ancora aperta nelle istanze EC2 create da Elastic Beanstalk.

Cosa sto facendo male o cosa manca?

risposta

7

La porta MySQL 3306 è aperta solo nell'istanza RDS (non nell'istanza EC2). Quindi, se si controlla sul istanza EC2, non dovrebbe in ascolto sulla porta 3306.

Cose quelli che si possono fare per controllare RDS sta lavorando:

  • Verificare la connessione istanza EC2 di RDS.
    • SSH per l'istanza (eb ssh) ed eseguire . Potrebbe essere necessario installare prima telnet (yum install telnet).
    • Se è successo, controlla la tua app.
    • Se non funziona, controllare il prossimo punto.
  • Assicuratevi che i vostri RDS e il posizionamento EC2 è corretto:
    • Per private solo RDS di accesso:
      • Assicurarsi che siano in stessa VPC e consentire la connessione in ingresso in RDS dal IP di VPC a 3306. Per prestazioni migliori, utilizzare l'indirizzo IP anziché il nome del gruppo di sicurezza.
      • Se sono su VPC diversi, è possibile creare VPC Peering.
    • Per pubblici RDS di accesso:
      • Come sopra, permettono la connessione in arrivo da IP di VPC.
  • assicurarsi istanze EC2 sono autorizzati a fare connessione in uscita alla porta 3306 nel gruppo di protezione EC2.
  • Assicurarsi che l'host EC2 non abbia negato la regola 3306 in iptables.
  • Se l'EC2 e l'RDS sono in VPC diversi e si utilizza l'IP privato per l'EC2, controllare il server NAT. Assicurati di consentire che la porta 3306 sia sottoposta a proxificazione.
+0

Inizialmente EC2 da Elastic Beanstalk non era nello stesso VPC di RDS. Così ho ricreato Elastic Beanstalk all'interno dello stesso VPC di RDS usando --vpc switch su eb create command. Per risolvere l'ulteriore problema di connessione, ho dovuto aggiungere VPC IP alla connessione in entrata per RDS. Grazie per la tua ampia spiegazione. Spero che aiuti anche altri utenti AWS. –

Problemi correlati