J'ai déjà jeté un coup d'œil à Comment installer mongodb dans Elastic Beanstalk? daté de 2014, qui ne fonctionne plus. ainsi que https://docs.mongodb.org/ecosystem/platforms/Amazon-ec2/#manually-deploy-mongodb-on-ec2
J'ai mis en place un nouvel environnement élastique beanstalk fonctionnant sur node.js avec 1 micro-instance ec2 '64bit Amazon Linux 2016.03 v2.1.0 exécutant Node.js'
J'ai déjà essayé d'utiliser ssh pour me connecter à mon instance et installer les packages mongodb à l'aide de la commande yum:
$ Sudo yum install -y mongodb-org-server mongodb-org-Shell mongodb-org-tools
et a reçu ce rappel:
Loaded plugins: priorities, update-motd, upgrade-helper
No package mongodb-org-server available.
No package mongodb-org-Shell available.
No package mongodb-org-tools available.
Error: Nothing to do
Lors de ma première connexion ssh à mon instance, j'ai reçu cet avertissement d'erreur:
This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
Actuellement, mon environnement est configuré comme un environnement à instance unique, pour économiser sur les coûts. Cependant, à l'avenir, je passerai à un environnement de mise à l'échelle automatique.
Pour cette raison, je demande s'il est recommandé d'apporter des modifications via ssh dans ec2, ou devrais-je uniquement utiliser EB CLI?
J'ai à la fois EC2 et EB CLI installés localement, mais je n'ai jamais utilisé EB CLI auparavant. Si je dois utiliser EB, est-ce que quelqu'un a une façon recommandée d'installer mongodb?
Dans le cas où quelqu'un chercherait une réponse, voici les conseils que j'ai reçus du support commercial aws.
Tout le code déployé sur Elastic Beanstalk doit être "sans état" I.E. N'apportez jamais de modifications directement à une instance de beanstalk en cours d'exécution en utilisant SSH ou FTP .... car cela entraînerait des incohérences et/ou des pertes de données! - Elastic Beanstalk n'est pas conçu pour des applications qui ne sont pas apatrides. L'environnement est conçu pour évoluer en fonction de la charge de votre réseau/CPU et créer de nouvelles instances à partir d'une AMI de base. Si une instance a des problèmes ou le matériel sous-jacent, Elastic Beanstalk mettra fin à ces instances en cours d'exécution et les remplacera par de nouvelles instances. Par conséquent, pourquoi aucune modification de code ne doit être appliquée ou effectuée "directement" à une instance existante car les nouvelles instances ne seront pas au courant de ces changements directs. TOUS les changements/codes doivent être téléchargés sur la console Elastic Beanstalk ou les outils CLI et poussés vers toutes les instances en cours d'exécution. Plus d'informations sur les concepts de conception Elastic Beanstalk peuvent être lues sur le lien suivant http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/concepts.concepts.design.html
Solution suggérée: Compte tenu de ce qui précède, si vous utilisez MongoDB pour stocker les données d'application, notre recommandation serait de coupler DE à l'environnement MongoDB à partir de votre application Node.js. I.E Créez un serveur MongoDB en dehors d'Elastic Beanstalk, par exemple en lançant MongoDB directement sur une instance EC2 et que votre application Elastic Beanstalk Node.js se connecte au serveur MongoDB en utilisant les paramètres de connexion de votre application.
-Création de MongoDB Voici quelques exemples de liens qui peuvent être utiles pour votre scénario de création d'un serveur MongoDB. Déployer MongoDB sur EC2, https://docs.mongodb.org/ecosystem/platforms/Amazon-ec2/ Client de noeud MongoDB https://docs.mongodb.org/getting-started/node/client / MongoDB dans le guide de démarrage rapide AWS Cloud http://docs.aws.Amazon.com/quickstart/latest/mongodb/architecture.html
-Ajout de variables d'environnement à Elastic Beanstalk pour référencer votre serveur MongoDB Une fois que vous avez créé votre serveur MongoDB, vous pouvez transmettre les paramètres de connexion nécessaires à votre environnement Elastic Beanstalk à l'aide de variables d'environnement. Exemple utilisant .ebextensions .config auquel vous pouvez ajouter l'URL/ports/utilisateurs Mongo etc.
option_settings: - option_name: MONGO_DB_URL valeur: "Votre adresse IP interne MongoDB EC2"
Vous trouverez ci-dessous des informations sur l'utilisation des propriétés d'environnement et leur lecture dans votre application. http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#create_deploy_nodejs_custom_container-envprop Et des informations utilisant .ebextensions .config peuvent être trouvées sur le lien suivant - http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/ebextensions.html
Alternativement, vous pouvez également définir la variable d'environnement à l'aide de la cli ou via l'AWS Console eb cli définir les variables d'environnement peuvent être lues par le lien ci-dessous. http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html Utilisation de la console AWS pour définir les propriétés du système (AWS Management Console) Ouvrez la console Elastic Beanstalk. Accédez à la console de gestion de votre environnement. Choisissez Configuration. Dans la section Configuration logicielle, choisissez Modifier. Sous Propriétés de l'environnement, créez votre nom/vos valeurs ...
Accès aux paramètres de configuration de l'environnement Dans l'environnement Node.js exécuté dans AWS Elastic Beanstalk, vous pouvez accéder aux variables d'environnement à l'aide de process.env.ENV_VARIABLE, comme dans l'exemple suivant. process.env.MONGO_DB_URL process.env.PARAM2
Résumé: En résumé, je recommanderais les étapes suivantes pour intégrer MongoDB aux environnements Elastic Beanstalk. Étape 1) Créez un serveur MongoDB en dehors d'Elastic Beanstalk Étape 2) Créez votre application Node.js dans Elastic Beanstalk qui se connecte à votre serveur MongoDB
1) SSH dans une instance eb et installez manuellement la CLI mongo:
Sudo yum-config-manager --add-repo https://repo.mongodb.org/yum/Amazon/2013.03/mongodb-org/4.0/x86_64/
Sudo yum install --nogpgcheck -y mongodb-org-Shell
L'inconvénient est que si EB réduit son nombre d'instances et que l'instance sur laquelle vous vous trouvez est arrêtée, vous êtes expulsé de la session SSH:
The system is going down for halt NOW!
Connection to 1.2.3.4 closed by remote Host.
Connection to 1.2.3.4 closed.
ERROR: CommandError - An error occurred while running: ssh.
Vous devez ensuite tout recommencer: connectez-vous à l'instance, installez mongo CLI ...
2) Pré-installez mongo CLI sur les instances à l'aide d'un .config
fichier:
container_commands:
01-mongocli:
command: "Sudo yum-config-manager --add-repo https://repo.mongodb.org/yum/Amazon/2013.03/mongodb-org/4.0/x86_64/;Sudo yum install --nogpgcheck -y mongodb-org-Shell"
ignoreErrors: true //use this the ensure instance deployment even if mongo CLI installation fails
Encore une fois, si l'instance est arrêtée par la mise à l'échelle automatique, vous devrez vous reconnecter, mais vous n'avez pas besoin d'installer la CLI mongo manuellement.
3) Créez une instance distincte qui héberge votre CLI mongo, comme décrit dans la réponse de @ amyloula. Si votre mongodb se trouve dans un VPC, vous devez également créer cette instance distincte dans le VPC. Vous devrez ensuite créer une passerelle pour accéder publiquement à l'instance, car vous ne pouvez pas vous connecter directement à une instance dans un VPC.