Estoy tratando de mover una aplicación express node.js existente de Heroku a AWS. La aplicación usa MongoDB para la base de datos. El problema es que aws EB (Elastic Beanstalk) no es compatible de forma nativa con bases de datos no SQL (entiendo que necesito usar una VPC y puedo conectar una VPC a MongoDB). Estoy un poco confundido con la configuración tanto en el código de la aplicación (cómo se deben escribir los archivos de configuración/si se necesitan cambios en el backend) como en cómo se debe configurar en AWS. ¿Hay una mejor opción para esto? En este momento, la eb deploy
falla y los registros no parecen útiles. Cualquier consejo es muy apreciado.
config.yml
branch-defaults: Master: environment: Testproject-env environment-defaults: Testproject-env: branch: null repository: null global: application_name: test-project default_ec2_keyname: null default_platform: Node.js default_region: us-east-2 include_git_submodules: true instance_profile: null platform_name: null platform_version: null profile: eb-cli sc: git workspace_type: Application
nodecommand.config
option_settings: aws:elasticbeanstalk:container:nodejs: NodeCommand: "npm start"
aplicación.js
const express = require("express"); const mongoose = require('mongoose'); const users = require('./routes/api/users'); const bodyParser = require('body-parser'); const passport = require('passport'); const path = require('path') const app = express(); if (process.env.NODE_ENV === 'production') { app.use(express.static('frontend/build')); app.get('/', (req, res) => { res.sendFile(path.resolve(__dirname, 'frontend', 'build', 'index.html')); }) } const db = require('./config/keys_dev').mongoURI; mongoose .connect(db, { useNewUrlParser: true }) .then(() => console.log("Connected to MongoDB successfully")) .catch(err => console.log(err)); app.use(passport.initialize()); require('./config/passport')(passport); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use('/api/users', users); const port = process.env.PORT || 5000; app.listen(port, () => console.log(`Server is running on port ${port}`));
Sugeriría considerar usar Amazon Document DB en su lugar para este caso de uso. Amazon Document DB ofrece un motor compatible con MongoDB, por lo que no tenemos que realizar ningún cambio de código al migrar aplicaciones de MongoDB en AWS, excepto las actualizaciones de la cadena de conexión.
Lo que hace que el uso de Amazon Document DB sea realmente interesante para este caso de uso de migración es que puede aprovechar AWS Data Migration Service (DMS) para extraer su conjunto de datos existente del antiguo MongoDB a Amazon Document DB con poco esfuerzo. Aquí hay una guía de inicio para migrar datos de MongoDB a Document DB.