Comment associer une instance RDS existante à un environnement Elastic Beanstalk?


22

J'ai créé mon instance RDS avant de créer mon environnement Elastic Beanstalk. Les deux fonctionnent ensemble sans problème, mais j'aimerais qu'ils soient liés ensemble et que les paramètres RDS soient accessibles via les RDS_*variables d'environnement.

La page de configuration d'Elastic Beanstalk indique:

Vous n'avez pas de base de données.  Vous pouvez créer une nouvelle base de données RDS ou utiliser une base de données existante.

Bien que le premier lien crée une instance RDS sur place et la relie à l'environnement actuel, le deuxième lien redirige simplement vers cette page de documentation. , qui explique malheureusement uniquement comment créer une nouvelle instance RDS, mais pas comment lier une instance existante.

Comment puis-je associer une instance RDS existante à mon environnement Elastic Beanstalk?

Réponses:


24

La réponse "sélectionnée" est correcte, mais je voulais ajouter quelques informations supplémentaires car la plupart des personnes utilisant EB et RDS ensemble devraient également avoir la même exigence - même si elles ne le savent pas encore.

Première question : pourquoi voudriez-vous que l'instance RDS existe en dehors de l'environnement EB? Réponse : pour que la durée de vie de l'instance RDS ne soit pas liée à la durée de vie de l'environnement EB. c'est-à-dire que lorsque vous supprimez un environnement, vous ne voulez pas détruire la base de données avec lui. Il y a très peu de raisons pour lesquelles vous voudriez réellement lier votre instance RDS à votre environnement.

Un problème avec les paramètres de RDS indépendamment d'EB est que vous n'obtenez pas les variables RDS_ * automatiquement remplies et que vous devez donc récupérer leurs valeurs et les remplir vous-même via la console Web ou .ebextensions. Il n'est cependant pas recommandé d'ajouter des informations d'identification à votre code, car cela peut être une faille de sécurité.

Mais ensuite, le problème suivant est que si vous souhaitez créer des environnements par programmation (comme pour les déploiements à temps d'arrêt zéro bleu-vert), vous avez besoin d'une solution pour remplir les valeurs RDS sensibles (par exemple, le mot de passe) à chaque fois. Malheureusement, cela vous oblige à descendre plus bas dans la pile AWS et à utiliser un modèle CloudFormation.

La solution idéale est une amélioration d'EB afin que le lien "utiliser une base de données existante" mentionné dans la question vous permette en fait d'associer manuellement une base de données RDS existante, puis de remplir automatiquement les variables d'environnement RDS_ *, plutôt que de vous rediriger vers une documentation inutile. . Le support AWS a déclaré que cela avait été soulevé comme une demande de fonctionnalité, mais bien sûr aucun délai n'a été donné.


un an plus tard et cela semble toujours être le cas?
lifeofguenter

1
Toujours le cas pour autant que je sache.
rgareth

Comment bumpons-nous cet AWS?
matthew

un an plus tard, c'est toujours la même chose.
Karan Kumar

Étapes pour ajouter rds docs.aws.amazon.com/elasticbeanstalk/latest/dg/… (juste pour être complet pour les gens comme moi qui le recherchent) Ils ne créent pas une configuration d'environnement et la chargent via un fichier de configuration lors de la création. Cela devrait ajouter des vars env, donc tant qu'ils ne changent pas, cela devrait être ok?
Manuel

18

Réponse du support AWS :

Afin d'associer une base de données existante à un environnement EB, vous devez en prendre un instantané via la console de gestion, puis choisir «créer une nouvelle base de données RDS» sous la couche de données. Il ne semble pas y avoir de moyen d'associer une instance RDS en cours d'exécution à un environnement EB existant sans en lancer une nouvelle à partir d'un instantané en raison de la façon dont l'instance RDS est liée à la pile Cloudformation sous-jacente de l'environnement Beanstalk. Si vous prenez un instantané de votre instance RDS actuelle, vous pouvez la recommencer dans EB si vous le souhaitez.

Si vous souhaitez que l'instance RDS existe en dehors de l'environnement, vous pouvez simplement fournir les paramètres de connexion en tant que variables d'environnement via la console EB: Configuration -> Couche Web -> Configuration logicielle. Ensuite, vous pouvez lire la variable d'environnement via PHP .


J'ai pris la deuxième approche, en définissant les variables d'environnement avec les noms RDS_ * pour suivre la convention. Les groupes de sécurité sont assez serrés, mais il semble toujours un peu lâche de mettre un mot de passe de base de données dans une variable d'environnement.
Joseph Sheedy

@velotron Même chose pour moi, mais je m'y suis habitué!
Benjamin

2

J'avais besoin de cela récemment et je voulais également automatiser les étapes à l'aide de l'AWS CLI / EB CLI. Dans tous les cas, voici essentiellement les étapes que j'ai suivies (en supposant que vous avez déjà créé une instance RDS):

  1. Assurez-vous que vous disposez d'une configuration de groupe de sécurité différente pour votre instance RDS (pas le groupe par défaut VPC). Vous pouvez utiliser aws ec2 create-security-group(AWS CLI) pour cela et l'associer à l'instance RDS à l'aide de aws rds modify-db-instance(AWS CLI).
  2. Initialisez votre application beanstalk (j'ai utilisé eb init(EB CLI) pour cela).
  3. Lisez les données de configuration pertinentes de votre base de données RDS (nom de la base de données, nom d'hôte, port, etc.). J'ai utilisé aws rds describe-db-instancespour ça.
  4. L'utilisation de ces données définit les RDS_*variables d'environnement sur l'instance EB lorsque vous créez l'environnement (ou déployez l'environnement ultérieurement). Vous pouvez le faire avec eb create/ eb deploy(EB CLI). Lorsque vous créez l'environnement au départ, il sera dégradé, car les groupes de sécurité pour accéder à la base de données RDS ne sont pas correctement configurés.
  5. Obtenez les groupes de sécurité appropriés à partir de la configuration EB. Vous avez besoin de celui du groupe de mise à l'échelle automatique et de l'équilibreur de charge élastique. Vous pouvez utiliser aws elasticbeanstalk describe-configuration-settings(AWS CLI) pour cela.
  6. Autorisez votre groupe de mise à l'échelle automatique pour le trafic entrant vers votre base de données pour le groupe de sécurité que vous avez configuré à l'étape 1. J'ai utilisé aws ec2 authorize-security-group-ingress(AWS CLI) pour cela, qui utilise des groupes de sécurité VPC (pas des groupes de sécurité DB). Vous pouvez probablement obtenir la même chose avec les groupes de sécurité DB s'ils sont pris en charge dans votre région. Lors de la configuration de la règle de trafic entrant, assurez-vous d'utiliser le bon protocole et le bon port pour votre moteur de base de données.
  7. Ajoutez le groupe d'équilibrage de charge élastique aux groupes de sécurité de votre instance RDS (à nouveau à l'aide de aws rds modify-db-instance(AWS CLI)).
  8. Redémarrez ou redéployez l'application Elastic Beanstalk (par exemple en utilisant eb deploy(EB CLI)). J'ai dû faire un redéploiement, car j'exécute des migrations sur les déploiements.

C'est surtout ça. Vous devriez maintenant pouvoir augmenter / réduire vos instances RDS sans vous soucier des instances EB, tant que vous conservez le nom d'hôte et les informations d'identification de la même base. Vous pouvez également effectuer des déploiements bleu / vert avec cette approche (mais vous devrez peut-être effectuer des étapes supplémentaires pour révoquer également l'accès aux groupes de sécurité).


0

Le plus simple pour ajouter un groupe de sécurité existant aux instances EB EC2 par configuration est d'utiliser le fichier simple décrit dans https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/ security-configuration / securitygroup-addexisting.config

Par exemple:

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

0

J'étais confronté au même problème et résolu en utilisant les étapes suivantes:

1) Accédez à l'instance EC2 et notez l'exemple de votre groupe de sécurité "sg-121212121212"

2) Passer à l'annonce du groupe de sécurité RDS = trafic entrant

3) Modifier la règle, sélectionner tout le trafic et ajouter votre nouveau groupe de sécurité ebs "sg-121212121212"

J'espère que cela vous sera utile


-2

créer RDS sous Elastic; il ajoutera un nouveau groupe de sécurité correct; modifier le groupe de sécurité de l'ancien RDS existant; définir la chaîne de connexion correcte lors de la configuration Web et tout le travail ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.