Frage Wie verknüpfe ich eine vorhandene RDS-Instanz mit einer Elastic Beanstalk-Umgebung?


Ich habe meine RDS-Instanz erstellt, bevor ich meine Elastic Beanstalk-Umgebung erstellt habe. Die beiden arbeiten ohne Probleme zusammen, aber ich möchte, dass sie miteinander verbunden sind und die RDS - Parameter über die RDS_* Umgebungsvariablen.

Die Elastic Beanstalk-Konfigurationsseite sagt:

You do not have a database. You can create a new RDS database or use an existing database.

Obwohl der erste Link eine RDS-Instanz direkt erstellt und mit der aktuellen Umgebung verknüpft, wird der zweite Link nur weitergeleitet diese Dokumentationsseite., die leider nur erklärt, wie man eine neue RDS-Instanz erstellt, aber nicht, wie man eine existierende RDS-Instanz verbindet.

Wie kann ich eine vorhandene RDS-Instanz meiner Elastic Beanstalk-Umgebung zuordnen?


18
2017-09-22 16:57


Ursprung




Antworten:


Die "ausgewählte" Antwort ist korrekt, aber ich wollte einige zusätzliche Informationen hinzufügen, da die meisten Leute, die EB und RDS zusammen benutzen, die gleiche Anforderung haben sollten - auch wenn sie es noch nicht wissen.

Erste Frage: Warum möchten Sie, dass die RDS-Instanz außerhalb der EB-Umgebung existiert? Antworten: Damit ist die Lebensdauer der RDS-Instanz nicht an die Lebensdauer der EB-Umgebung gebunden. Wenn Sie eine Umgebung entfernen, möchten Sie die DB nicht damit zerstören. Es gibt nur wenige Gründe, warum Sie Ihre RDS-Instanz an Ihre Umgebung binden möchten.

Ein Problem mit Einstellungen von RDS unabhängig von EB besteht darin, dass Sie die RDS_ * Variablen nicht automatisch aufgefüllt bekommen und daher ihre Werte abrufen müssen und sie selbst über die Webkonsole oder .expextensions auffüllen müssen. Es wird jedoch nicht empfohlen, dass Sie Ihrem Code Anmeldeinformationen hinzufügen, da dies eine Sicherheitslücke darstellen kann.

Das nächste Problem besteht jedoch darin, dass Sie, wenn Sie programmgesteuert Umgebungen erstellen möchten (z. B. für blau-grüne Zero-Downtime-Bereitstellungen), eine Lösung benötigen, um die sensiblen RDS-Werte (z. B. das Kennwort) jedes Mal aufzufüllen. Unglücklicherweise müssen Sie den AWS-Stack weiter unten ablegen und eine CloudFormation-Vorlage verwenden.

Die ideale Lösung ist eine Erweiterung von EB, sodass der in der Frage erwähnte Link "eine vorhandene Datenbank verwenden" Ihnen erlaubt, eine vorhandene RDS-Datenbank manuell zuzuordnen und dann die RDS_ * -Umgebungsvariablen automatisch wieder zu füllen, anstatt Sie in nicht hilfreiche Dokumentation umzuleiten . AWS Support sagte, dass dies als Feature-Anfrage gestellt wurde, aber natürlich keinen Zeitrahmen gegeben.


22
2018-02-24 22:00



Ein Jahr später und es scheint immer noch so zu sein? - lifeofguenter
Soweit ich weiß, immer noch. - rgareth
Wie stoßen wir dieses AWS? - mattvick
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 für Leute wie mich, die es suchen) Sie erstellen keine Umgebungskonfiguration und laden sie bei der Erstellung durch eine Konfigurationsdatei. Das sollte env vars hinzufügen, solange sie sich nicht ändern, sollte das in Ordnung sein? - Manuel


Antwort von der AWS-Unterstützung:

Um eine vorhandene Datenbank einer EB-Umgebung zuzuordnen, müssen Sie über die Management Console eine Momentaufnahme erstellen und dann unter der Datenschicht "neue RDS-Datenbank erstellen" auswählen. Es scheint keine Möglichkeit zu bestehen, eine laufende RDS-Instanz einer vorhandenen EB-Umgebung zuzuordnen, ohne eine neue von einem Snapshot zu starten, da die RDS-Instanz in den der Beanstalk-Umgebung zugrunde liegenden Cloudformations-Stack eingebunden ist. Wenn Sie eine Momentaufnahme Ihrer aktuellen RDS-Instanz erstellen, können Sie diese bei Bedarf in EB neu 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 -> Webebene -> Softwarekonfiguration. Dann kannst du Lies die Umgebungsvariable über PHP.


17
2017-09-23 08:17



Ich nahm den zweiten Ansatz und definierte Umgebungsvariablen mit den RDS_ * -Namen, um der Konvention zu folgen. Die Sicherheitsgruppen sind ziemlich eng, aber es fühlt sich immer noch ein wenig locker an, ein DB-Kennwort in einer Umgebungsvariablen zu setzen. - velotron
@velotron Das gleiche für mich, aber ich habe mich daran gewöhnt! - Benjamin


Das brauchte ich kürzlich und wollte auch die Schritte mit dem AWS CLI / EB CLI automatisieren. In jedem Fall sind dies die Schritte, denen ich gefolgt bin (vorausgesetzt, Sie haben bereits eine RDS-Instanz erstellt):

  1. Stellen Sie sicher, dass Sie eine andere Sicherheitsgruppe für Ihre RDS-Instanz eingerichtet haben (nicht die VPC-Standardgruppe). Sie können verwenden aws ec2 create-security-group (AWS CLI) und verknüpfen Sie sie mit der RDS-Instanz aws rds modify-db-instance (AWS CLI).
  2. Initialisieren Sie Ihre Beanie-Anwendung (ich benutzte eb init (EB CLI) dafür).
  3. Lesen Sie die relevanten Konfigurationsdaten aus Ihrer RDS-Datenbank (DB-Name, Hostname, Port usw.). ich benutzte aws rds describe-db-instances dafür.
  4. Mit diesen Daten setzen Sie die RDS_* Umgebungsvariablen in der EB-Instanz, wenn Sie die Umgebung erstellen (oder die Umgebung später bereitstellen). Sie können dies mit tun eb create/eb deploy (EB CLI). 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.
  5. Holen Sie sich die relevanten Sicherheitsgruppen aus der EB-Konfiguration. Sie benötigen den für die Autoscaling-Gruppe und den Elastic Load Balancer. Sie können verwenden aws elasticbeanstalk describe-configuration-settings (AWS CLI) dafür.
  6. Autorisieren Sie Ihre Autoscaling-Gruppe für eingehenden Datenverkehr zu Ihrer Datenbank für die Sicherheitsgruppe, die Sie in Schritt 1 eingerichtet haben aws ec2 authorize-security-group-ingress (AWS CLI) dafür, die VPC-Sicherheitsgruppen (nicht DB-Sicherheitsgruppen) verwendet. Sie können wahrscheinlich dasselbe mit DB-Sicherheitsgruppen erreichen, wenn sie in Ihrer Region unterstützt werden. Stellen Sie bei der Einrichtung der Regel für eingehenden Datenverkehr sicher, dass Sie das richtige Protokoll und den richtigen Port für Ihre Datenbank-Engine verwenden.
  7. Fügen Sie die Sicherheitslastenausgleichsgruppe den Sicherheitsgruppen Ihrer RDS-Instanz hinzu (ebenfalls mit aws rds modify-db-instance (AWS CLI)).
  8. Starten oder erneutes Bereitstellen der Elastic Beanstalk-Anwendung (z. B. mithilfe von eb deploy (EB CLI)). Ich musste eine erneute Bereitstellung durchführen, da ich Migrationen auf Bereitstellungen ausführe.

Das ist es meistens. Jetzt sollten Sie in der Lage sein, Ihre RDS-Instanzen ohne Rücksicht auf die EB-Instanzen hoch / runter zu skalieren, solange Sie den Hostnamen und die DB-Anmeldeinformationen beibehalten. Sie können auch Blue / Green-Bereitstellungen mit diesem Ansatz durchführen (Sie müssen jedoch möglicherweise einige zusätzliche Schritte ausführen, um auch den Zugriff auf Sicherheitsgruppen zu widerrufen).


1
2018-01-11 00:58





Die einfachste Möglichkeit, EB EC2-Instanzen durch Konfiguration zu einer vorhandenen Sicherheitsgruppe hinzuzufügen, ist die einfache Datei, die in beschrieben wird https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config

Zum Beispiel:

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

0
2017-10-20 09:57





RDS unter Elastic erstellen; Es wird eine neue richtige Sicherheitsgruppe hinzugefügt. Sicherheitsgruppe des alten RDS ändern; Stellen Sie die korrekte Verbindungszeichenfolge bei der Webkonfiguration ein und alle arbeiten ...


-2
2017-09-10 17:11