Ho creato una cartella chiamata ".ebextensions" e un file chiamato "aws.config". Il contenuto di questo file è il seguente:-
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
Ciò che fa questo file è:-
- Crea un file "mongodb.repo" (vedi http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/).
Esegue 4 comandi contenitore (vengono eseguiti dopo la creazione del server ma prima della distribuzione di WAR. Questi sono:-
- Abilita accesso root - questo è richiesto per i comandi "sudo" afaik.
- Installa Mongo - installa mongo come servizio usando il comando yum. Abbiamo solo bisogno di "mongos", ma questo non è stato ancora separato dal server mongo. Questo potrebbe cambiare in futuro.
- Cambia la configurazione per mongod su "off" - questo significa che se il server si riavvia il programma mongod non viene eseguito se il server si riavvia.
- Crea uno script per eseguire mongos. Nota i $MONGO_CONFIG_IPS nel passaggio 4, puoi passarli utilizzando la pagina di configurazione in Elastic Beanstalk. Verrà eseguito al riavvio del server.
- Imposta le autorizzazioni per l'esecuzione. Per questo motivo ho fatto 4/5 invece di inserirlo in un file:la sezione è che non ha creato gli indirizzi IP dalla variabile di ambiente.
- Esegui lo script creato nel passaggio 4.
Questo funziona per me. Il mio file WAR si collega semplicemente a localhost e tutto il traffico passa attraverso il router. Sono inciampato per un paio di giorni su questo dato che la documentazione è piuttosto scarsa sia in Amazon AWS che in MongoDB.
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
AGGIORNAMENTO :- Se hai problemi con la mia vecchia risposta, prova quanto segue:funziona per la versione 3 di Mongo ed è attualmente utilizzato nel nostro cluster MongoDB di produzione.
Questa versione è più avanzata in quanto utilizza il DNS interno (tramite AWS Route53) - nota il mongo-cfg1.internal ...
. Si tratta delle migliori pratiche consigliate e vale la pena configurare la tua zona privata utilizzando Route53. Ciò significa che se si verifica un problema con una delle istanze di MongoDB Config, puoi sostituire l'istanza danneggiata e aggiornare l'indirizzo IP privato in Route53:nessun aggiornamento richiesto in ogni beanstalk elastico, il che è davvero interessante. Tuttavia, se non vuoi creare una zona puoi semplicemente inserire gli indirizzi IP in configDB
attributo (come il mio primo esempio).
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 &"