Wie ordne ich eine vorhandene RDS-Instanz einer Elastic Beanstalk-Umgebung zu?
22
Ich habe meine RDS-Instanz erstellt, bevor ich meine Elastic Beanstalk-Umgebung erstellt habe. Die beiden arbeiten problemlos zusammen, aber ich möchte, dass sie miteinander verknüpft werden und die RDS-Parameter über die RDS_*Umgebungsvariablen zugänglich sind.
Auf der Konfigurationsseite von Elastic Beanstalk heißt es:
Mit dem ersten Link wird zwar eine RDS-Instanz erstellt und mit der aktuellen Umgebung verknüpft, mit dem zweiten Link wird jedoch nur auf diese Dokumentationsseite umgeleitet . Dies erklärt leider nur, wie Sie eine neue RDS-Instanz erstellen, nicht aber, wie Sie eine vorhandene verknüpfen.
Wie kann ich eine vorhandene RDS-Instanz meiner Elastic Beanstalk-Umgebung zuordnen?
Die "ausgewählte" Antwort ist richtig, aber ich wollte einige zusätzliche Informationen hinzufügen, da die meisten Benutzer von EB und RDS die gleichen Anforderungen haben sollten - auch wenn sie es noch nicht wissen.
Erste Frage : Warum soll die RDS-Instanz außerhalb der EB-Umgebung vorhanden sein?
Antwort : Damit die Lebensdauer der RDS-Instanz nicht an die Lebensdauer der EB-Umgebung gebunden ist. dh wenn Sie eine Umgebung entfernen, möchten Sie die DB damit nicht zerstören. Es gibt nur wenige Gründe, warum Sie Ihre RDS-Instanz tatsächlich an Ihre Umgebung binden möchten.
Ein Problem bei der Einrichtung von RDS unabhängig von EB besteht darin, dass die RDS_ * -Variablen nicht automatisch ausgefüllt werden und daher ihre Werte abgerufen und selbst über die Webkonsole oder .ebextensions ausgefüllt werden müssen. Es wird jedoch nicht empfohlen, Ihrem Code Anmeldeinformationen hinzuzufügen, da dies eine Sicherheitslücke darstellen kann.
Das nächste Problem ist jedoch, dass Sie, wenn Sie programmgesteuert Umgebungen erstellen möchten (z. B. für blau-grüne Bereitstellungen ohne Ausfallzeiten), jedes Mal eine Lösung zum Auffüllen der vertraulichen RDS-Werte (z. B. Kennwort) benötigen. Leider müssen Sie dazu den AWS-Stapel weiter unten ablegen und eine CloudFormation-Vorlage verwenden.
Die ideale Lösung ist eine Erweiterung von EB, sodass Sie über den in der Frage erwähnten Link "Vorhandene Datenbank verwenden" tatsächlich eine vorhandene RDS-Datenbank manuell zuordnen und dann die RDS_ * -Umgebungsvariablen automatisch wieder auffüllen lassen können, anstatt Sie zu nicht hilfreicher Dokumentation umzuleiten . Der AWS-Support gab an, dass dies als Funktionsanforderung angeführt wurde, aber natürlich kein Zeitrahmen angegeben wurde.
ein Jahr später und es scheint immer noch der Fall zu sein?
LifeofGuenter
1
Soweit ich weiß, ist dies immer noch der Fall.
Rgareth
Wie stoßen wir diese AWS an?
Matthew
Ein Jahr später ist es immer noch dasselbe.
Karan Kumar
Schritte zum Hinzufügen von rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/… (nur zur Vervollständigung für Leute wie mich, die danach suchen) Sie erstellen keine Umgebungskonfiguration und laden sie beim Erstellen über eine Konfigurationsdatei. Dies sollte env vars hinzufügen, so lange sie sich nicht ändern, sollte dies in Ordnung sein?
Um eine vorhandene Datenbank mit einer EB-Umgebung zu verknüpfen, müssen Sie über die Management Console einen Snapshot davon erstellen und dann unter "Datenebene" die Option "Neue RDS-Datenbank erstellen" auswählen. Es scheint keine Möglichkeit zu geben, eine ausgeführte RDS-Instanz einer vorhandenen EB-Umgebung zuzuordnen, ohne eine neue aus einem Snapshot zu starten, da die RDS-Instanz in den zugrunde liegenden Cloudformation-Stack der Beanstalk-Umgebung eingebunden ist. Wenn Sie einen Schnappschuss Ihrer aktuellen RDS-Instanz erstellen, können Sie ihn auf Wunsch in EB erneut starten.
Wenn die RDS-Instanz außerhalb der Umgebung vorhanden sein soll, können Sie die Verbindungsparameter einfach als Umgebungsvariablen über die EB Console bereitstellen: Konfiguration -> Web Layer -> Software-Konfiguration. Anschließend können Sie die Umgebungsvariable über PHP lesen .
Ich habe den zweiten Ansatz gewählt und Umgebungsvariablen mit den Namen RDS_ * definiert, um der Konvention zu folgen. Die Sicherheitsgruppen sind ziemlich eng gesetzt, aber es fühlt sich immer noch etwas locker an, ein DB-Passwort in eine Umgebungsvariable zu setzen.
Joseph Sheedy
@velotron Das gleiche für mich, aber ich habe mich daran gewöhnt!
Benjamin
2
Ich brauchte dies vor kurzem und wollte auch die Schritte mit der AWS CLI / EB CLI automatisieren. In jedem Fall sind hier im Wesentlichen die Schritte aufgeführt, die ich ausgeführt habe (vorausgesetzt, Sie haben bereits eine RDS-Instanz erstellt):
Stellen Sie sicher, dass Sie für Ihre RDS-Instanz eine andere Sicherheitsgruppe eingerichtet haben (nicht die VPC-Standardgruppe). Sie können dafür aws ec2 create-security-group(AWS CLI) verwenden und es mit aws rds modify-db-instance(AWS CLI) der RDS-Instanz zuordnen.
Initialisieren Sie Ihre Beanstalk-Anwendung (ich habe eb init(EB CLI) dafür verwendet).
Lesen Sie relevante Konfigurationsdaten aus Ihrer RDS-Datenbank (DB-Name, Host-Name, Port usw.). Ich habe das benutzt aws rds describe-db-instances.
Verwenden Sie diesen Datensatz, um die RDS_*Umgebungsvariablen auf der EB-Instanz festzulegen, wenn Sie die Umgebung erstellen (oder die Umgebung später bereitstellen). Sie können dies mit eb create/ eb deploy(EB CLI) tun . Wenn Sie die Umgebung zu Beginn erstellen, wird sie beeinträchtigt, da die Sicherheitsgruppen für den Zugriff auf die RDS-Datenbank nicht ordnungsgemäß eingerichtet sind.
Rufen Sie die relevanten Sicherheitsgruppen aus der EB-Konfiguration ab. Sie benötigen die für die Autoscaling-Gruppe und für den elastischen Lastausgleich. Sie können dafür aws elasticbeanstalk describe-configuration-settings(AWS CLI) verwenden.
Autorisieren Sie Ihre Autoscaling-Gruppe für eingehenden Datenverkehr zu Ihrer Datenbank für die Sicherheitsgruppe, die Sie in Schritt 1 eingerichtet haben. Ich habe dafür aws ec2 authorize-security-group-ingress(AWS CLI) verwendet, die VPC-Sicherheitsgruppen (nicht DB-Sicherheitsgruppen) verwendet. Sie können wahrscheinlich dasselbe mit DB-Sicherheitsgruppen erreichen, wenn diese in Ihrer Region unterstützt werden. Stellen Sie beim Einrichten der Regel für eingehenden Datenverkehr sicher, dass Sie das richtige Protokoll und den richtigen Port für Ihr Datenbankmodul verwenden.
Fügen Sie die Elastic Load Balancer-Gruppe zu den Sicherheitsgruppen Ihrer RDS-Instanz hinzu (erneut mit aws rds modify-db-instance(AWS CLI)).
Starten Sie die Elastic Beanstalk-Anwendung neu oder stellen Sie sie erneut bereit (z. B. mithilfe von eb deploy(EB CLI)). Ich musste eine erneute Bereitstellung durchführen, da ich Migrationen für Bereitstellungen durchführe.
Das ist meistens alles. Jetzt sollten Sie in der Lage sein, Ihre RDS-Instanzen ohne Rücksicht auf die EB-Instanzen zu vergrößern / zu verkleinern, solange Sie den Hostnamen und die DB-Anmeldeinformationen unverändert lassen. Sie können mit diesem Ansatz auch blau / grüne Bereitstellungen durchführen (möglicherweise müssen Sie jedoch einige zusätzliche Schritte ausführen, um auch den Sicherheitsgruppenzugriff zu widerrufen).
RDS unter Elastic erstellen; Es wird eine neue korrekte Sicherheitsgruppe hinzugefügt. Sicherheitsgruppe des alten existierenden RDS ändern; Setze die korrekte Verbindungszeichenfolge in der Webkonfiguration und alles funktioniert ...
Antwort vom AWS-Support :
quelle
Ich brauchte dies vor kurzem und wollte auch die Schritte mit der AWS CLI / EB CLI automatisieren. In jedem Fall sind hier im Wesentlichen die Schritte aufgeführt, die ich ausgeführt habe (vorausgesetzt, Sie haben bereits eine RDS-Instanz erstellt):
aws ec2 create-security-group
(AWS CLI) verwenden und es mitaws rds modify-db-instance
(AWS CLI) der RDS-Instanz zuordnen.eb init
(EB CLI) dafür verwendet).aws rds describe-db-instances
.RDS_*
Umgebungsvariablen auf der EB-Instanz festzulegen, wenn Sie die Umgebung erstellen (oder die Umgebung später bereitstellen). Sie können dies miteb create
/eb deploy
(EB CLI) tun . Wenn Sie die Umgebung zu Beginn erstellen, wird sie beeinträchtigt, da die Sicherheitsgruppen für den Zugriff auf die RDS-Datenbank nicht ordnungsgemäß eingerichtet sind.aws elasticbeanstalk describe-configuration-settings
(AWS CLI) verwenden.aws ec2 authorize-security-group-ingress
(AWS CLI) verwendet, die VPC-Sicherheitsgruppen (nicht DB-Sicherheitsgruppen) verwendet. Sie können wahrscheinlich dasselbe mit DB-Sicherheitsgruppen erreichen, wenn diese in Ihrer Region unterstützt werden. Stellen Sie beim Einrichten der Regel für eingehenden Datenverkehr sicher, dass Sie das richtige Protokoll und den richtigen Port für Ihr Datenbankmodul verwenden.aws rds modify-db-instance
(AWS CLI)).eb deploy
(EB CLI)). Ich musste eine erneute Bereitstellung durchführen, da ich Migrationen für Bereitstellungen durchführe.Das ist meistens alles. Jetzt sollten Sie in der Lage sein, Ihre RDS-Instanzen ohne Rücksicht auf die EB-Instanzen zu vergrößern / zu verkleinern, solange Sie den Hostnamen und die DB-Anmeldeinformationen unverändert lassen. Sie können mit diesem Ansatz auch blau / grüne Bereitstellungen durchführen (möglicherweise müssen Sie jedoch einige zusätzliche Schritte ausführen, um auch den Sicherheitsgruppenzugriff zu widerrufen).
quelle
Das Hinzufügen einer vorhandenen Sicherheitsgruppe zu EB EC2-Instanzen durch Konfiguration ist am einfachsten, wenn Sie die in https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/ beschriebene einfache Datei verwenden. Sicherheitskonfiguration / securitygroup-addexisting.config
Beispielsweise:
quelle
Ich hatte das gleiche Problem und habe es mit den folgenden Schritten behoben:
1) Gehen Sie zur EC2-Instanz und notieren Sie sich das Beispiel für Ihre Sicherheitsgruppe "sg-121212121212".
2) Wechseln Sie zur RDS-Sicherheitsgruppe und zum eingehenden Datenverkehr
3) Regel bearbeiten wähle den gesamten Verkehr aus und füge deine neue ebs Sicherheitsgruppe "sg-121212121212" hinzu
Hoffe es wird hilfreich
quelle
RDS unter Elastic erstellen; Es wird eine neue korrekte Sicherheitsgruppe hinzugefügt. Sicherheitsgruppe des alten existierenden RDS ändern; Setze die korrekte Verbindungszeichenfolge in der Webkonfiguration und alles funktioniert ...
quelle