Implementaci贸n de API con AWS Elastic Beanstalk



A finales de enero, realizamos otro curso intensivo en l铆nea "Backend PHP Developer" . Esta vez, el tema de una lecci贸n abierta fue la creaci贸n de un bot de Telegram para pedir caf茅 en una instituci贸n y pagar en l铆nea . El seminario web result贸 ser muy rico, por lo que se prolong贸 durante dos d铆as: "D铆a 1" y "D铆a 2" . Le presentamos una versi贸n de texto del primer d铆a de uso intensivo en l铆nea. Se trataba de presentar AWS Elastic Beanstalk y desplegar la API con 茅l.

Profesor: Michael Kamorin , desarrollador principal de backend en Skyeng.


Computaci贸n en la nube


El uso de la computaci贸n en la nube en general y AWS en particular nos brinda las siguientes ventajas:

  1. Acceso conveniente a la red bajo demanda. Podemos conectarnos en cualquier momento los 365 d铆as del a帽o 24/7.
  2. Fondo general de recursos inform谩ticos configurables. La computaci贸n en la nube nos permite utilizar un cierto fondo com煤n de recursos inform谩ticos, que son mucho m谩s grandes que los recursos de una m谩quina, en comparaci贸n con un servidor privado.
  3. Provisi贸n y liberaci贸n inmediata. Podemos obtener recursos adicionales en poco tiempo si es necesario. Y libera estos recursos con la misma rapidez tan pronto como se vuelvan innecesarios.
  4. Los costos operativos m谩s bajos. Dependiendo del nivel de abstracci贸n, se requiere un nivel diferente de inversi贸n financiera, pero generalmente es m铆nimo.

驴Qu茅 problemas resolvemos?

  1. Autoservicio Cuando nos comunicamos con un proveedor habitual de los mismos servidores VPS, escribimos una carta, solicitamos asignar los recursos necesarios, etc. En respuesta, se nos ofrecen tarifas y opciones de configuraci贸n. Elegimos, pagamos y m谩s. En AWS, todo es mucho m谩s simple: la tarjeta se conecta de inmediato, elegimos el entorno nosotros mismos y comenzamos todo nosotros mismos teniendo en cuenta nuestras necesidades. Es un autoservicio completo, lo cual es muy conveniente.
  2. Hospedaje Naturalmente, para ejecutar nuestro c贸digo en una m谩quina remota, obtenemos el alojamiento necesario. En principio, no solo las nubes resuelven este problema.
  3. Grupo de recursos configurables. Un bot de Telegram espec铆fico, por supuesto, no requerir谩 muchos recursos, pero sucede que estamos hablando de tareas comerciales m谩s complejas o crecimiento de proyectos.
  4. Elasticidad 驴Qu茅 se quiere decir aqu铆? Cuando tenemos una estacionalidad pronunciada (incluso dentro del d铆a), cuando sabemos el momento de inicio del horario de m谩xima audiencia y las cargas m谩ximas, podemos ahorrar. Est谩 claro que si usamos los recursos inform谩ticos que cubren las cargas m谩ximas 24/7, pagaremos de m谩s. Elasticity nos permite aumentar los recursos inform谩ticos poco antes del horario de m谩xima audiencia y liberarlos inmediatamente despu茅s de su finalizaci贸n. Por lo tanto, reducimos significativamente el costo del servicio de nuestra infraestructura.
  5. Medibilidad Vemos la cantidad de llamadas a nuestras funciones (en el caso de, por ejemplo, AWS Lambda), vemos recursos (cu谩ntas m谩quinas virtuales funcionan, cu谩l es la carga), es decir, tenemos un monitoreo bastante avanzado y preciso.

Niveles de abstracci贸n.

Hablemos un poco sobre los niveles de abstracci贸n:

  1. En los locales tradicionales , proporcionamos todo, desde la compra de hardware hasta la configuraci贸n de la aplicaci贸n que lanzamos.
  2. IaaS nos proporciona algo de hardware y un hipervisor. Adem谩s, podemos seleccionar e instalar independientemente el sistema operativo requerido, el entorno, podemos escalar, etc.
  3. CaaS . El nivel de contenedor como servicio se destac贸 recientemente con el desarrollo de la contenedorizaci贸n en general y la dockerizaci贸n en particular. En el caso de CaaS, no estamos obligados a configurar el sistema operativo; ya se nos proporciona desde un determinado conjunto de sistemas operativos preconfigurados.
  4. PaaS . Un nivel bastante antiguo de abstracci贸n, que apareci贸 mucho antes de que CaaS se destacara. En este nivel, tambi茅n contamos con un entorno de tiempo de ejecuci贸n, es decir, este es un alojamiento cl谩sico. Supongamos que tenemos una versi贸n de PHP para elegir con un conjunto de extensiones. A nivel de este PHP, podemos hacer cualquier cosa: instalar equilibradores, escribir nuestro propio c贸digo, etc.
  5. FaaS . Un ejemplo es el mismo AWS Lambda. En este caso, el escalado ya se proporciona por medio del proveedor de la nube que proporciona la funcionalidad, y no tenemos problemas cuando la aplicaci贸n comienza a crecer. El mismo AWS Lambda puede admitir miles de instancias sin que sea necesario que lo configuremos (solo pague).
  6. SaaS . En este caso, solo tenemos acceso a la opci贸n de configuraci贸n que los programadores ponen en el software que utilizamos.



Para no ser infundado, damos ejemplos sobre los niveles de abstracci贸n:

  • IaaS - Amazon Elastic Compute Cloud (EC2) - trabajaremos con 茅l hoy;
  • CaaS - Amazon Elastic Container Service (ECS);
  • PaaS - Google App Engine;
  • FaaS - AWS Lambda;
  • SaaS: Gmail.

Intercambio de recursos

驴C贸mo se usan generalmente las nubes? Hay varios escenarios:

  1. Nube privada Toda la infraestructura se encuentra en el centro de datos y pertenece a la empresa (pertenece en el sentido de que nadie, excepto nosotros, puede trabajar en estos recursos).
  2. Nube p煤blica Toda la infraestructura est谩 en la nube. Solo sabemos que tenemos un servicio del nivel seleccionado, que se nos proporciona. No sabemos c贸mo se organiza en los niveles inferiores. No poseemos completamente nuestros datos, aunque solo sea porque si queremos que se eliminen, no tenemos garant铆a de que esto suceda. Adem谩s, si el proveedor es pirateado, la probabilidad de p茅rdida de informaci贸n confidencial es alta. S铆, estos riesgos existen con una nube privada, pero aqu铆 estamos hablando de pirater铆a selectiva de sus recursos, y aqu铆 puede obtener la distribuci贸n, como dicen, por casualidad y para la empresa.
  3. Nube H铆brida Hay posibles opciones:

  • en modo normal, se utiliza su propia infraestructura, se conecta una nube en las cargas m谩ximas;
  • alienados de nuestro software, los c谩lculos se llevan a la nube;
  • en modo normal, se usa la nube; en situaciones de emergencia, se produce el cambio a su infraestructura.

Aws


Hablando de AWS, primero mencionamos algunos de los componentes que necesitaremos y se utilizar谩n debajo del cap贸.

AWS IAM

IAM (Identity and Access Management) es lo primero que debe enfrentar cuando se registra. IAM le permite configurar los derechos de acceso a la cuenta, administrar roles, grupos y usuarios.

Amazon sugiere que sigamos las Mejores pr谩cticas, aunque tendremos que violarlas un poco durante la lecci贸n. Estas son las siguientes pr谩cticas:

  • para cada persona f铆sica: un usuario separado;
  • para cada aplicaci贸n: un rol separado;
  • los accesos que se emitir谩n no est谩n comprometidos, no estamos buscando, no estamos usando el c贸digo;
  • nunca use una cuenta ra铆z que no sea la configuraci贸n inicial. Si accidentalmente enciende una contrase帽a en alguna parte, alguien puede comprar m谩quinas virtuales desde su cuenta ra铆z. E incluso si configura todas las alertas necesarias, puede obtener mil d贸lares y medio muy r谩pidamente.

AWS EC2

EC2: Elastic Compute Cloud (IaaS): un servicio web que nos brinda la capacidad de implementar m谩quinas virtuales. EC2 proporciona:

  • gesti贸n de la potencia inform谩tica que utilizaremos (cuando registra una cuenta gratuita, el acceso se otorga a un solo tipo de instancia);
  • Conjunto de im谩genes de m谩quina de Amazon (AMI): im谩genes de m谩quina virtual con aplicaciones, bibliotecas, etc.

Adem谩s, generalmente para trabajar con EC2 necesitar谩 usar Amazon S3 (Servicio de almacenamiento simple): almacenamiento de archivos.

Cabe se帽alar aqu铆 que no tocaremos EC2 directamente, ya que all铆 debe configurar todo usted mismo, comenzando desde el entorno y terminando con la configuraci贸n de acceso a la red. Sin embargo, debe entenderse que bajo el cap贸 EC2 siempre est谩 ah铆.

AWS Elastic Beanstalk

Elastic Beanstalk - servicio de orquestaci贸n (PaaS o CaaS, dependiendo de lo que orquestar谩). Si la contenedorizaci贸n es trabajar con el contenedor mismo y su llenado, entonces la orquestaci贸n es trabajar con contenedores, digamos, a nivel meta. La orquestaci贸n es, de hecho, un mecanismo que nos permite iniciar contenedores / m谩quinas virtuales ya sea mediante API o mediante la consola.

Beanstalk agrega en la parte superior del sistema operativo una capa de entorno para un lenguaje de programaci贸n particular, un servidor web, contenedorizaci贸n, un conjunto de bibliotecas, extensiones, etc.

Usaremos PHP 7.3 con el servidor web Apache (no se proporciona nginx, esto no es bueno ni malo, sino un hecho a tener en cuenta). Como no lo lograremos todo, a nosotros, en principio, no nos importa.

Instalaci贸n y configuraci贸n


Bueno, pasemos a practicar. La primera etapa es el registro y la configuraci贸n de los derechos de acceso:

  1. Reg铆strese en amazon.com . Tomamos una cuenta gratuita con un conjunto m铆nimo de autom贸viles;
  2. iniciar sesi贸n Dado que Elastic Beanstalk ofrece la regi贸n de Oregon de manera predeterminada, seleccione Oregon en la consola de administraci贸n de AWS:
  3. vaya al servicio IAM a trav茅s de la consola (escriba iam en la barra de b煤squeda):
  4. all铆 vemos un tablero en el que realizamos ciertas acciones

  5. Para trabajar con Elastic Beanstalk, creamos y configuramos un nuevo usuario (solo acceso program谩tico):


  6. agregue un grupo con derechos AWSElasticBeanstalkFullAccess:
  7. descargue los detalles de acceso y gu谩rdelos en un lugar seguro. Si pierde el archivo, el usuario tendr谩 que volver a crearlo.




Entonces, tenemos un usuario y seguiremos trabajando con este usuario. En esta etapa, todo.

EB CLI

Ahora necesita instalar la consola ElasticBeanstalk. Este es un proceso bastante largo, aqu铆 hay una breve descripci贸n de lo que hay que hacer:

  1. Clonamos el repositorio https://github.com/aws/aws-elastic-beanstalk-cli-setup .
  2. Leemos cuidadosamente el archivo L茅ame y realizamos las acciones necesarias para su sistema operativo (los problemas potenciales tambi茅n se describen en el archivo L茅ame).
  3. Despu茅s de la instalaci贸n, no olvide exportar variables con rutas.
  4. Verifique que todo funcione, eb 鈥搗ersion .



Inicializando Elastic Beanstalk

Ahora necesitamos inicializar Elastic Beanstalk en nuestro proyecto. Para hacer esto:

  • descomprimir el archivo con el c贸digo fuente ;
  • ejecutar la instalaci贸n del compositor;
  • ejecute eb init;
  • seleccione una regi贸n (el valor predeterminado es Oregon) y especifique los detalles de acceso del archivo descargado;
  • especifique el nombre de la aplicaci贸n, el lenguaje de programaci贸n PHP y la versi贸n 7.3.

Tenga en cuenta que no utilizaremos CodeCommit y acceso ssh .

Despu茅s de la inicializaci贸n, la carpeta .elasticbeanstalk aparece en la aplicaci贸n, dentro de la cual habr谩 un archivo de configuraci贸n.



Crear y ejecutar una instancia EC2

Ahora necesita crear y ejecutar la instancia EC2 a trav茅s de Beanstalk. Para hacer esto:

  • ejecutar eb create ;
  • especifique el nombre del entorno, DNS CNAME , seleccione equilibrador de carga (aplicaci贸n) ;
  • rechazar Spot Fleet (elasticidad bajo carga);
  • verificar el estado de eb status / eb health ;
  • tratando de abrir el sitio abierto de eb .

Curiosamente, pero nos enfrentamos al error 403. 驴Qu茅 podr铆a haber salido mal? Como nuestra aplicaci贸n est谩 en Laravel, el punto de entrada se encuentra en el directorio /public , y EB espera un punto de entrada en el directorio ra铆z de forma predeterminada.



Arreglo de la configuraci贸n

El siguiente paso es arreglar la configuraci贸n:

  • ve a la consola en Elastic Beanstalk;
  • seleccione nuestra aplicaci贸n y vaya a Configuraci贸n;
  • en la secci贸n Software, haga clic en el bot贸n Modificar;
  • instalar la ra铆z del documento en / public;
  • haga clic en Aplicar;
  • Verificamos el rendimiento ( /api/v1/goods ).

Configuraci贸n de verificaci贸n de salud

En realidad, queda por configurar la comprobaci贸n de estado . Para hacer esto:

  • ir a la consola en Elastic Beanstalk;
  • seleccione nuestra aplicaci贸n y vaya a Configuraci贸n;
  • en la secci贸n Load Balancer, haga clic en el bot贸n Modificar;
  • en la secci贸n Procesos, seleccione predeterminado y seleccione la acci贸n Editar;
  • especifique Path / api / v1 / goods y HTTP code 200 en la secci贸n Health Check;
  • haga clic en Guardar y aplicar.

Hablamos m谩s sobre el monitoreo y el primer d铆a de intensivo en l铆nea lleg贸 a su fin. Si est谩 interesado en este tema, es mejor revisar la lecci贸n por completo y repetir todos los pasos para el maestro. Adem谩s, tambi茅n se recomienda prestar atenci贸n a la continuaci贸n. Recuerde que el resultado de un intensivo en l铆nea de 2 d铆as fue la creaci贸n de un bot de Telegram para ordenar caf茅 en la instituci贸n y pagar en l铆nea:

Source: https://habr.com/ru/post/485910/


All Articles