Cómo implementar una aplicación Node.js en AWS Elastic Beanstalk

Me tomó la mayor parte de un mes descubrir cómo configurar una cuenta de Amazon Web Services (AWS), configurar una aplicación Node.js para implementarla y luego implementarla.

Mucho de eso fue intentar descifrar la documentación de Amazon. Con suerte, esta guía lo llevará por el camino para implementar desde local para vivir sin demasiado dolor de cabeza.

Estoy ubicado en Los Ángeles, por lo que cuando configura su configuración, los valores predeterminados pueden no ser exactamente los mismos.

Prerrequisitos

  1. Conocimientos básicos de la línea de comandos

    Estoy seguro de que puede hacer esto sin la línea de comandos, pero es mucho más fácil usar la CLI

  2. Una cuenta de AWS
  3. La interfaz de línea de comandos de Elastic Beanstalk (EB CLI)

    Instrucciones de instalación a continuación

  4. Conocimientos básicos de Git

Configuración de una cuenta de AWS

Lo primero que debe hacer es configurar una cuenta de AWS. Si ya tiene una cuenta, asegúrese de tener un usuario de IAM que tenga claves API y el acceso adecuado.

Crea una cuenta

Muy claro. Crea una cuenta. El proceso de registro debería guiarlo por todo con bastante facilidad. Cuando configure una cuenta de AWS por primera vez, obtendrá acceso de root. Sin embargo, las mejores prácticas de seguridad son crear un usuario separado que utilizará para iniciar sesión con regularidad.

Configura tu IAM

NOTA: No soy un experto en AWS Identity and Access Management (IAM). Las acciones que tomé fueron para mi propio caso de uso personal y pueden no ser adecuadas para sus necesidades. Revise los permisos detenidamente antes de dar acceso a los usuarios.

AWS publica las mejores prácticas con regularidad; obtenga una de 2016 aquí.

Configurar un grupo

Antes de configurar un usuario para iniciar sesión, cree un grupo que administrará los permisos. En mi caso, configuré un grupo de SuperAdmin en el que me iba a meter para poder tener acceso a todo.

Para este grupo, dado que es básicamente para iniciar sesión y tener acceso a todo yo mismo, elegí AdministratorAccess como permiso.

Para obtener más información sobre los grupos de IAM, vaya aquí.

Configurar un usuario de IAM

Configurar un usuario es bastante simple, pero si se queda atascado, consulte la página de IAM para AWS. Tienen muchos videos útiles.

Solo recuerda:

  1. Darles permisos de clave de acceso

    (vea la imagen a continuación)

  2. Asignarlos al grupo de IAM apropiado

Una vez que tenga su propia configuración de usuario, cierre la sesión de la raíz y vuelva a iniciarla como su nuevo usuario de IAM.

Configuración del entorno local

Ahora que tenemos nuestras claves de cuenta listas, comencemos con la implementación.

¿Qué es Elastic Beanstalk?

Elastic Beanstalk (EB) es una forma bastante sencilla de configurar aplicaciones escalables. Utiliza instancias de Amazon Elastic Compute Cloud (EC2), buckets de Amazon Simple Storage Service (S3) y balanceadores de carga para administrar la arquitectura de su aplicación por usted.

Si necesita escalar rápidamente debido a la demanda de la red, lo hará. También es realmente sorprendente enviar actualizaciones porque puede hacer "actualizaciones continuas", lo que permite que la aplicación permanezca en línea mientras se actualiza. Ordenado.

Cómo evitar que Elastic Beanstalk le cueste una tonelada

Esto solo se aplica a los nuevos usuarios que aún califican para el plan gratuito:

  1. Obtienes 750 horas de tiempo t2.micro EC2 por mes. Esto le dará suficiente para ejecutar un solo servidor a tiempo completo.

    Sin embargo, si agrega un servidor más, lo pagará.

  2. Puede cambiar toda la lógica de su servidor a las funciones de Lambda, pero ese es un tema para otro día (y también hay algunos inconvenientes).

    Si está interesado, consulte este artículo.

Sin embargo, ¿cuánto va a costar?

Buena pregunta. Aquí tienes una muestra de mi factura. Esto es con la aplicación Node.js en ejecución sobre la que estoy escribiendo este artículo (EB, Cloudfront, S3 Buckets).

Si se pregunta cuánto costará una vez que finalice el plan gratuito, consulte esto.

Creación de un entorno EB dentro de su aplicación

Este no es un tutorial de Node.js, ya que está fuera del alcance de este artículo. Pero si necesita una aplicación para jugar, consulte el generador de aplicaciones Express. Te dará un "Hola mundo", al menos. Es lo que usé initpara mi proyecto.

En el futuro, se supone que ya tiene una aplicación Node.js que se ejecuta localmente sin problemas.

Configuración de la CLI de EB

Lo primero es poner en funcionamiento la CLI de AWS / EB, que solo consiste en instalar un par de herramientas y configurar la configuración.

Los documentos de AWS hacen un mejor trabajo al explicarlo que yo, así que échales un vistazo aquí.

Nota: Si alguna vez tiene problemas con las claves API, puede verificarlas / cambiarlas editando el archivo de configuración.

open ~/.aws/config

Despliegue inicial

Ahora que tenemos todas nuestras herramientas en línea, ¿qué sigue?

eb init

Cuando ejecute este comando, le hará un montón de preguntas:

  1. Se le pedirá que elija una región.

    El valor predeterminado es us-west-2: EE.UU. Oeste (Oregón)

  2. Le preguntará qué aplicación usar o cree una nueva.

    La primera opción debería ser crear una nueva.

  3. Le preguntará si desea utilizar AWS CodeCommit.

    No tengo experiencia con esto, pero solo estoy usando GitHub, así que dije que no.

Configura tus variables Env

Este fue probablemente mi mayor problema. No sé si mi cerebro analizó la documentación o qué. Sin embargo, una vez que lo descubro, es realmente muy simple. Y los archivos de configuración están escritos en YAML ❤️.

Cuando lo haga eb init, creará una carpeta .elasticbeanstalken su directorio raíz. Realmente no tiene que meterse con nada aquí, ya que debería configurarse automáticamente cuando ejecute el comando por primera vez.

Sin embargo, para tener sus variables de entorno y cualquier otra configuración que necesite ejecutar en el momento de inicio, cree una nueva carpeta: .ebextensions

La estructura de la carpeta debería verse así:

- .ebextensions -- 01_yourconfig.config - .elasticbeanstalk -- config.yml

Los archivos de configuración están escritos en YAML, como se mencionó anteriormente. Para darle una idea de cómo deberían verse, aquí hay algunos ejemplos:

Archivo de variables de entorno:

# 01_envar.config option_settings: aws:elasticbeanstalk:application:environment: PORT: 8081 NODE_ENV: production

Un archivo para configurar Node.js:

Realmente no tiene que especificar el NodeVersionporque le dará el último que pueda en las instancias EC2. Pero está aquí por si acaso.

# 02_nodecommand.config option_settings: aws:elasticbeanstalk:container:nodejs: NodeCommand: "npm run start" NodeVersion: 8.8.1

Esta es la forma más fácil para mí de administrar los ajustes de configuración, pero se pueden ajustar en el panel de EB bajo configuración.

Si quieres saber más, aquí tienes un artículo asombroso sobre ese tema.

Crea un ambiente

eb create 

luego implementar

eb deploy

Suponiendo que todo salió bien, su aplicación ahora está implementada en la "nube".

Compruébalo con eb open

Implementar cambios

Una vez que haya configurado todo, introducir cambios es muy fácil.

NOTA: Los cambios se deben enviar a Git antes de enviarlos al entorno.

No me di cuenta de eso la primera vez, y me tomó una eternidad darme cuenta. No cometa el mismo error, ¡realice esos cambios!

Entonces, una vez que haya realizado los cambios, simplemente escriba el comando a continuación y espere a que siga su curso.

eb deploy 

Otros comandos EBCLI útiles

Para abrir la instancia dentro de la terminal, que es considerablemente más fácil que intentar recordar el diccionario de una URL que AWS le proporciona al principio:

eb open

Para abrir la consola:

eb console

Para obtener archivos de registro directamente en su terminal:

eb logs

¿Que sigue?

Nombre de dominio personalizado

Si lo ejecuta eb open, notará que la URL es una URL muy larga. Si lo desea, puede conectarlo a su dominio utilizando Route 53. En su mayor parte, todo eso es todo el material de registro DNS estándar. Puede dejar la administración de DNS dondequiera que haya registrado su dominio, pero me resulta más fácil tenerlo todo en un solo lugar.

Certificado SSL

Obtener un certificado SSL para su instancia también es bastante fácil. Visite el administrador de certificados y cree un nuevo certificado para su dominio. Este también es un proceso simple.

Nota: Si usted planea usar un certificado SSL para Cloudfront, usted tiene que iniciar el proceso desde la zona N. Virginia. Puede cambiar su zona en la parte superior derecha de la pantalla.

Una vez que esté verificado y listo para usar, tírelo en su configuración de EB. La forma más sencilla es ir a la consola y seleccionarla.

  1. Vaya a su panel de EB
  2. Elija su aplicación
  3. Elige tu entorno
  4. Haga clic en "configuración" y elija el certificado SSL.

Otra nota: a veces es posible que tenga problemas con el administrador de certificados si tiene una cuenta nueva. Si le dice que se ponga en contacto con el servicio de atención al cliente cuando intente crear un certificado, hágalo y ellos lo solucionarán.

Conclusión

Guau. Qué viaje. Es de esperar que haya tenido éxito y no haya tenido que ejecutar los documentos de AWS demasiadas veces. Pero, si soy sincero conmigo mismo, estoy seguro de que tuviste que hacerlo al menos una vez. AWS es un servicio monstruoso y solo crece día a día.

Apoyo

Disfrutaste este artículo? Te gustaria ver mas? ¿Tienes un par de dólares de sobra? Revisa el enlace a continuación. Cada taza de café se convierte en otros cientos de líneas de código :)

Compre un café de Jared Nutt - BuyMeACoffee.com

Desarrollador web con sede en Los Ángeles haciendo todo lo posible para contribuir al software de código abierto y escribir excelentes tutoriales. buymeacoff.ee

Recursos

AWS en inglés sencillo

Introducción a los archivos de configuración de AWS Elastic Beanstalk (.ebextensions) y a amarlos

Introducción a AWS

acloudguru (No es un servicio gratuito, sin embargo, tienen un curso de introducción que es gratuito y muy informativo)