Come associare un'istanza RDS esistente a un ambiente Elastic Beanstalk?


22

Ho creato la mia istanza RDS prima di creare il mio ambiente Elastic Beanstalk. I due stanno lavorando insieme senza problemi, ma vorrei che fossero collegati insieme e che i parametri RDS fossero accessibili tramite le RDS_*variabili di ambiente.

La pagina di configurazione di Elastic Beanstalk dice:

Non hai un database.  È possibile creare un nuovo database RDS o utilizzare un database esistente.

Sebbene il primo collegamento crei un'istanza RDS sul posto e la colleghi all'ambiente corrente, il secondo collegamento reindirizza a questa pagina della documentazione. , che purtroppo spiega solo come creare una nuova istanza RDS, ma non come collegarne una esistente.

Come posso associare un'istanza RDS esistente al mio ambiente Elastic Beanstalk?

Risposte:


24

La risposta "selezionata" è corretta, ma volevo aggiungere alcune informazioni aggiuntive poiché la maggior parte delle persone che usano EB e RDS insieme dovrebbero avere lo stesso requisito, anche se non lo sanno ancora.

Prima domanda : perché vuoi che l'istanza RDS esista al di fuori dell'ambiente EB? Risposta : In modo che la durata dell'istanza RDS non sia legata alla durata dell'ambiente EB. cioè quando rimuovi un ambiente, non vuoi distruggere il DB con esso. Esistono pochissimi motivi per cui si desidera collegare effettivamente l'istanza RDS al proprio ambiente.

Un problema con le impostazioni su RDS indipendentemente da EB è che non ottieni le variabili RDS_ * automaticamente popolate e quindi devi recuperare i loro valori e popolarli tu stesso tramite console web o .ebextensions. Tuttavia, non è consigliabile aggiungere credenziali al codice, poiché ciò può rappresentare un problema di sicurezza.

Ma poi, il problema successivo è se si desidera creare ambienti a livello di programmazione (come per le distribuzioni di downtime zero blu-verde), allora è necessaria una soluzione su come popolare i valori RDS sensibili (ad es. Password) ogni volta. Sfortunatamente, questo richiede di eliminare ulteriormente lo stack AWS e utilizzare un modello CloudFormation.

La soluzione ideale è un miglioramento di EB in modo che il link "usa un database esistente" menzionato nella domanda in realtà ti consenta di associare manualmente un database RDS esistente e quindi di popolare automaticamente le variabili di ambiente RDS_ *, piuttosto che reindirizzarti a documentazione inutile . AWS Support ha affermato che questo è stato sollevato come una richiesta di funzionalità, ma ovviamente non è stato fornito alcun lasso di tempo.


un anno dopo e sembra ancora essere il caso?
lifeofguenter

1
Ancora il caso, per quanto ne so.
Margaret,

Come facciamo a sbattere questo AWS?
matthew

un anno dopo, è sempre lo stesso.
Karan Kumar,

Passaggi per l'aggiunta di rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/… (solo per completezza per le persone come me che la stanno cercando) Non si crea una configurazione ambientale e la si carica attraverso un file di configurazione al momento della creazione. Questo dovrebbe aggiungere env var, quindi fintanto che non cambiano, dovrebbe essere ok?
Manuel,

18

Risposta dal supporto AWS :

Per associare un database esistente a un ambiente EB, è necessario acquisire un'istantanea tramite la console di gestione e quindi scegliere "crea un nuovo database RDS" sotto il livello dati. Non sembra esserci un modo per associare un'istanza RDS in esecuzione a un ambiente EB esistente senza avviarne una nuova da un'istantanea a causa del modo in cui l'istanza RDS è collegata nello stack Cloudformation sottostante dell'ambiente Beanstalk. Se si acquisisce un'istantanea dell'istanza RDS corrente, è possibile avviarla nuovamente in EB, se lo si desidera.

Se si desidera che l'istanza RDS esista al di fuori dell'ambiente, è possibile fornire semplicemente i parametri di connessione come variabili di ambiente tramite la console EB: Configurazione -> Livello Web -> Configurazione software. Quindi, puoi leggere la variabile d'ambiente tramite PHP .


Ho adottato il secondo approccio, definendo le variabili di ambiente con i nomi RDS_ * per seguire la convenzione. I gruppi di sicurezza sono abbastanza stretti, ma sembra ancora un po 'lento mettere una password DB in una variabile d'ambiente.
Joseph Sheedy,

@velotron Lo stesso per me, ma mi ci sono abituato!
Benjamin,

2

Ne avevo bisogno di recente e volevo anche automatizzare i passaggi utilizzando la CLI AWS / EB CLI. In ogni caso, ecco in sostanza i passaggi che ho seguito (supponendo che tu abbia già creato un'istanza RDS):

  1. Assicurati di avere una diversa configurazione del gruppo di sicurezza per l'istanza RDS (non il gruppo predefinito VPC). È possibile utilizzare aws ec2 create-security-group(AWS CLI) per questo e associarlo all'istanza RDS utilizzando aws rds modify-db-instance(AWS CLI).
  2. Inizializza la tua applicazione beanstalk (ho usato eb init(EB CLI) per quello).
  3. Leggi i dati di configurazione rilevanti dal tuo database RDS (nome DB, nome host, porta, ecc.). L'ho usato aws rds describe-db-instancesper quello.
  4. L'uso di tali dati imposta le RDS_*variabili di ambiente sull'istanza EB quando si crea l'ambiente (o si distribuisce l'ambiente in un secondo momento). Puoi farlo con eb create/ eb deploy(CLI EB). Quando si crea inizialmente l'ambiente, questo verrà degradato, poiché i gruppi di sicurezza per accedere al database RDS non sono impostati correttamente.
  5. Ottieni i gruppi di sicurezza pertinenti dalla configurazione EB. È necessario quello per il gruppo con scalabilità automatica e per il bilanciamento del carico elastico. È possibile utilizzare aws elasticbeanstalk describe-configuration-settings(AWS CLI) per questo.
  6. Autorizzo il tuo gruppo di scalabilità automatica per il traffico in entrata verso il tuo database per il gruppo di sicurezza che hai impostato nel passaggio 1. Ho usato aws ec2 authorize-security-group-ingress(AWS CLI) per questo, che utilizza gruppi di sicurezza VPC (non gruppi di sicurezza DB). Probabilmente puoi ottenere lo stesso con i gruppi di sicurezza DB se sono supportati nella tua regione. Quando si imposta la regola del traffico in entrata, assicurarsi di utilizzare il protocollo e la porta corretti per il motore di database.
  7. Aggiungi il gruppo di bilanciamento del carico elastico ai gruppi di sicurezza dell'istanza RDS (utilizzando nuovamente aws rds modify-db-instance(AWS CLI)).
  8. Riavvia o ridistribuisci l'applicazione Elastic Beanstalk (ad es. Utilizzando eb deploy (EB CLI)). Ho dovuto eseguire una ridistribuzione, poiché eseguo migrazioni su distribuzioni.

Questo è per lo più. Ora dovresti essere in grado di ridimensionare / aumentare le tue istanze RDS senza preoccuparti delle istanze EB, finché mantieni lo stesso nome host e credenziali DB. È inoltre possibile eseguire distribuzioni blu / verdi con tale approccio (ma potrebbe essere necessario eseguire alcuni passaggi aggiuntivi per revocare anche l'accesso ai gruppi di sicurezza).


0

Il modo più semplice per aggiungere un gruppo di sicurezza esistente alle istanze EB EC2 in base alla configurazione è utilizzare il semplice file descritto in https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/ la sicurezza configurazione / SecurityGroup-addexisting.config

Per esempio:

$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: rds-launch-wizard-1

0

Stavo affrontando lo stesso problema e risolto utilizzando i seguenti passaggi:

1) Vai all'istanza EC2 e annota l'esempio del tuo gruppo di sicurezza "sg-121212121212"

2) VAI all'annuncio del gruppo di sicurezza RDS = n traffico in entrata

3) Modifica regola seleziona tutto il traffico e aggiungi il tuo nuovo gruppo di sicurezza ebs "sg-121212121212"

Spero che sia utile


-2

creare RDS con Elastic; aggiungerà un nuovo gruppo di sicurezza corretto; modificare il gruppo di sicurezza del vecchio RDS esistente; imposta la stringa di connessione corretta nella configurazione web e tutto funziona ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.