J'ai créé un dossier appelé ".ebextensions" et un fichier appelé "aws.config". Le contenu de ce fichier est le suivant :-
files:
"/etc/yum.repos.d/mongodb.repo":
mode: "000644"
content: |
[MongoDB]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1
container_commands:
01_enable_rootaccess:
command: echo Defaults:root \!requiretty >> /etc/sudoers
02_install_mongo:
command: yum install -y mongo-10gen-server
ignoreErrors: true
03_turn_mongod_off:
command: sudo chkconfig mongod off
04_create_mongos_startup_script:
command: sudo sh -c "echo '/usr/bin/mongos -configdb $MONGO_CONFIG_IPS -fork -logpath /var/log/mongo/mongos.log --logappend' > /etc/init.d/mongos.sh"
05_update_mongos_startup_permissions:
command: sudo chmod +x /etc/init.d/mongos.sh
06_start_mongos:
command: sudo bash /etc/init.d/mongos.sh
Ce que fait ce fichier est :-
- Crée un fichier "mongodb.repo" (voir http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/).
Exécute 4 commandes de conteneur (celles-ci sont exécutées après la création du serveur mais avant le déploiement du WAR. Ce sont :-
- Activer l'accès root - ceci est requis pour les commandes "sudo" autant que je sache.
- Installer Mongo - installez mongo en tant que service à l'aide de la commande yum. Nous n'avons besoin que de "mongos" mais cela n'a pas encore été séparé du serveur mongo. Cela peut changer à l'avenir.
- Modifiez la configuration de mongod sur "off" - cela signifie que si le serveur redémarre, le programme mongod n'est pas exécuté si le serveur redémarre.
- Créer un script pour exécuter mongos. Notez les $MONGO_CONFIG_IPS à l'étape 4, vous pouvez les transmettre à l'aide de la page de configuration dans Elastic Beanstalk. Cela s'exécutera lors d'un redémarrage du serveur.
- Définir les autorisations d'exécution. C'est pourquoi j'ai fait 4/5 au lieu de mettre dans un fichier :la section est qu'il n'a pas créé les adresses IP à partir de la variable d'environnement.
- Exécutez le script créé à l'étape 4.
Cela fonctionne pour moi. Mon fichier WAR se connecte simplement à localhost et tout le trafic passe par le routeur. J'ai trébuché pendant quelques jours là-dessus car la documentation est assez mince à la fois dans Amazon AWS et MongoDB.
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
MISE À JOUR :- Si vous rencontrez des problèmes avec mon ancienne réponse, veuillez essayer ce qui suit - cela fonctionne pour la version 3 de Mongo et est actuellement utilisé dans notre cluster de production MongoDB.
Cette version est plus avancée dans la mesure où elle utilise le DNS interne (via AWS Route53) - notez le mongo-cfg1.internal ...
. Il s'agit des meilleures pratiques recommandées et cela vaut la peine de configurer votre zone privée à l'aide de Route53. Cela signifie que s'il y a un problème avec l'une des instances de MongoDB Config, vous pouvez remplacer l'instance cassée et mettre à jour l'adresse IP privée dans Route53 - aucune mise à jour requise dans chaque haricot élastique, ce qui est vraiment cool. Cependant, si vous ne souhaitez pas créer de zone, vous pouvez simplement insérer les adresses IP dans configDB
attribut (comme mon premier exemple).
files:
"/etc/yum.repos.d/mongodb.repo":
mode: "000644"
content: |
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1
"/opt/mongos.conf":
mode: "000755"
content: |
net:
port: 27017
operationProfiling: {}
processManagement:
fork: "true"
sharding:
configDB: mongo-cfg1.internal.company.com:27019,mongo-cfg2.internal.company.com:27019,mongo-cfg3.internal.company.com:27019
systemLog:
destination: file
path: /var/log/mongos.log
container_commands:
01_install_mongo:
command: yum install -y mongodb-org-mongos-3.0.2
ignoreErrors: true
02_start_mongos:
command: "/usr/bin/mongos -f /opt/mongos.conf > /dev/null 2>&1 &"