fragen stichworte

Wie kann eine vorhandene RDS-Instanz einer Elastic Beanstalk-Umgebung zugeordnet werden?

Ich habe meine RDS-Instanz vor dem Erstellen meiner Elastic Beanstalk-Umgebung erstellt. Die beiden arbeiten problemlos zusammen, aber ich möchte, dass sie miteinander verbunden sind und die RDS-Parameter über die Umgebungsvariablen RDS_* verfügbar sind.

Auf der Konfigurationsseite von Elastic Beanstalk heißt es:

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 auf diese Dokumentationsseite umgeleitet., das leider nur erläutert, wie eine neue RDS-Instanz erstellt wird, nicht jedoch, wie eine vorhandene verbunden wird.

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

antworten

Die "ausgewählte" Antwort ist korrekt, aber ich wollte einige zusätzliche Informationen hinzufügen, da die meisten Benutzer, die EB und RDS zusammen verwenden, die gleichen Anforderungen haben sollten - selbst wenn sie es noch nicht wissen.

Erste Frage: Warum soll die RDS-Instanz außerhalb der EB-Umgebung existieren? Antwort: Damit ist die Lebensdauer der RDS-Instanz nicht an die Lebensdauer der EB-Umgebung gebunden. Wenn Sie eine Umgebung entfernen, möchten Sie die Datenbank damit nicht zerstören. Es gibt sehr 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 gefüllt werden und daher ihre Werte abgerufen und über die Webkonsole oder .ebextensions ausgefüllt werden müssen. Es wird jedoch nicht empfohlen, dass Sie Ihrem Code Anmeldeinformationen hinzufügen, da dies eine Sicherheitslücke sein kann.

Das nächste Problem ist jedoch, wenn Sie programmgesteuert Umgebungen erstellen möchten (z. B. für blau-grüne Downtime-Bereitstellungen ohne Ausfallzeiten). Dann benötigen Sie eine Lösung, um die sensiblen RDS-Werte (z. B. Kennwort) jedes Mal aufzufüllen. Leider müssen Sie dazu den AWS-Stack weiter herunterfahren und eine CloudFormation-Vorlage verwenden.

Die ideale Lösung ist eine Erweiterung von EB, so dass Sie mit dem in der Frage erwähnten Link "Vorhandene Datenbank verwenden" tatsächlich eine vorhandene RDS-Datenbank manuell zuordnen und dann die Umgebungsvariablen RDS_ * automatisch neu auffüllen können, anstatt Sie umzuleiten wenig hilfreiche Dokumentation. Der AWS-Support sagte, dies sei eine Anfrage für eine Funktion, aber natürlich kein Zeitrahmen.

Beantworten Sie die AWS-Unterstützung:

In order to associate an existing database to a EB Environment you have to take a snapshot of it via the Management Console and then choose "create a new RDS database" under the Data Layer. There does not appear to be a way to associate a running RDS instance to an existing EB Environment without launching a new one from a snapshot due to the way the RDS instance is tied into the Beanstalk environment's underlying Cloudformation stack. If you take a snapshot of your current RDS instance you can start it anew in EB if you wish.

If you want the RDS instance to exist outside of the environment you can simply provide the connection parameters as environment variables via the EB Console: Configuration -> Web Layer -> Software Configuration. Then, you can read the environment variable via PHP.

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

  1. Stellen Sie sicher, dass Sie für Ihre RDS-Instanz eine andere Sicherheitsgruppe eingerichtet haben (nicht die VPC-Standardgruppe). Sie können aws ec2 create-security-group (AWS CLI) dafür verwenden und mit der RDS-Instanz über aws rds modify-db-instance (AWS CLI) verknüpfen.
  2. Initialisiere deine Beanie-Anwendung (ich habe eb init (EB CLI) dafür benutzt).
  3. Lesen Sie relevante Konfigurationsdaten aus Ihrer RDS-Datenbank (DB-Name, Hostname, Port usw.). Ich habe aws rds describe-db-instances dafür benutzt.
  4. Wenn Sie diese Daten verwenden, legen Sie die Umgebungsvariablen RDS_* in der EB-Instanz fest, wenn Sie die Umgebung erstellen (oder die Umgebung später bereitstellen). Sie können dies mit eb create/eb deploy (EB CLI) machen. 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 aws elasticbeanstalk describe-configuration-settings (AWS CLI) dafür verwenden.
  6. 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 aws ec2 authorize-security-group-ingress (AWS CLI) dafür verwendet, die VPC-Sicherheitsgruppen (keine 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 Sie die Elastic Beanstalk-Anwendung neu oder implementieren Sie sie erneut (z. B. mit 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).

Das Hinzufügen einer vorhandenen Sicherheitsgruppe zu EB EC2-Instanzen ist am einfachsten durch die Verwendung der einfachen Datei, die in https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration- beschrieben ist. Dateien, die von aws bereitgestellt werden,/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