AWS es un proveedor de nube popular que permite la implementación y escala de grandes aplicaciones. Dominar al menos una plataforma en la nube es una habilidad esencial para ingenieros de software y científicos de datos. Ejecutar una aplicación localmente no es suficiente para que se pueda usar en la producción: debe implementarse en un servidor para que sea accesible para los usuarios finales.
En este tutorial, caminaremos por un ejemplo de implementación de una aplicación Fastapi. Si bien el ejemplo se centra en los conceptos básicos de redes EC2, los principios también son ampliamente aplicables a otros tipos de aplicaciones.
Tenga en cuenta que este tutorial no cubre las mejores prácticas para el uso de AWS. En cambio, el objetivo es dar a los lectores una introducción práctica a la implementación de la aplicación utilizando instancias EC2.
# 01. Creación de instancias
Navegar al EC2 Panel de control en el menú de servicio AWS y elija crear una nueva instancia. Esto abrirá una página donde podemos definir los parámetros de instancia.
Seleccione el tipo de instancia correspondiente. En este tutorial, lanzaremos un servidor muy simple con requisitos técnicos mínimos, por lo que t3.nano Debe ser suficiente para nuestras necesidades.
Para sus contenedores, AWS usa autenticación SSH. Al crear una nueva instancia, es necesario crear un nuevo par de claves que nos permita iniciar sesión desde la máquina local utilizando el protocolo SSH. Hacer clic en Crear un nuevo par de claves.
Asigne un nombre a la nueva clave. No nos sumergiremos en las posibles opciones aquí, por lo que elegiremos RSA como tipo de par de clave y .pem como formato de archivo de clave privada.
Para ahorrar tiempo, en nuestra aplicación de demostración no nos preocuparemos por la seguridad. Para la configuración de la red, marque todas las casillas de verificación correspondientes al tráfico SSH, HTTP y HTTPS.
¡Excelente! Al hacer clic Instancia de lanzamientoAWS creará una nueva instancia.
Después de que se crea la instancia, un .pem El archivo se descargará a su máquina local. Este archivo contiene la clave privada que permite la autenticación SSH. Como buena práctica, almacene este archivo en una ubicación segura porque AWS no proporciona una forma de recuperarlo si se pierde.
Al abrir el panel de EC2, notará que la instancia creada tiene una dirección IP asociada. Esta IP se muestra bajo la etiqueta “Dirección pública de IPv4”. Por ejemplo, en la imagen a continuación, es “16.16.202.153”. Una vez que implementemos nuestra aplicación, será accesible desde un navegador utilizando esta dirección IP.
# 02. Conexión SSH
AWS ofrece varias formas de realizar la autenticación. En nuestro caso, usaremos el mecanismo SSH.
En el menú de instancia, haga clic Conectar y seleccionar Cliente SSH Desde la barra superior.
Abra el terminal local y, utilizando la captura de pantalla anterior como referencia, copie y ejecute el comando #3 (chmod 400 "<key_name>.pem") junto con el comando que se muestra debajo del “Ejemplo” etiqueta. Asegúrese de que su directorio de terminal actual coincida con la ubicación donde el .pem La clave se descargó en el paso anterior.
Durante la conexión SSH, el terminal podría indicar si proceder. Si lo hace, escriba “Sí”.
En este punto, estamos conectados con éxito desde el terminal local a la instancia de EC2. Cualquier comando ingresado en el terminal ahora se ejecutará directamente en el contenedor EC2.
# 03. Configuración del entorno
Después de conectarse a la instancia desde el terminal local, el siguiente paso es actualizar el Administrador de paquetes e instalar Python junto con Nginx.
sudo apt-get update
sudo apt install -y python3-pip nginx
Para redirigir el tráfico a nuestra aplicación, necesitamos crear un archivo de configuración NGINX. Este archivo debe colocarse en el directorio /etc/nginx/sites-enabled/ y puede tener cualquier nombre personalizado. Le agregaremos la siguiente configuración:
server {
listen 80;
server_name <Public_IP_Address>;
location / {
proxy_pass http://127.0.0.1:8000;
}
}
Básicamente, estamos especificando que cualquier solicitud externa enviada a la dirección IP de la instancia de EC2 en el puerto predeterminado 80 debe redirigirse a través de un proxy a la aplicación que se ejecuta dentro del contenedor EC2 en la dirección http://127.0.0.1:8000. Como recordatorio, esta es la dirección HTTP predeterminada y el puerto asignados por FASTAPI.
Para aplicar estos cambios, necesitamos reiniciar Nginx:
sudo service nginx restart
Si tenemos un servidor Fastapi que nos gustaría lanzar, la forma más simple sería publicarlo en GitHub y luego clonar el repositorio en la instancia de EC2.
git clone <GitHub_URL> <directory>
cd <directory>
Crear y activar un entorno virtual:
python3 -m venv venv
source venv/bin/activate
Instale los requisitos necesarios de Python (suponiendo que el repositorio clonado contiene un requisitos.txt archivo):
pip3 install -r requirements.txt
Ejecute el servidor:
python3 -m uvicorn <server_filename>:app
Abra el navegador e ingrese la dirección IP de la instancia.
Asegúrese de usar el protocolo HTTP (no HTTPS). Por ejemplo: <a href="http://16.16.202.153/" rel="noreferrer noopener" target="_blank">http://16.16.202.153</a>. El firewall puede bloquear su conexión, pero debe proceder a abrir la página web. Agregar /docs Después de la URL para abrir la arrogancia API rápida.
Ejercicio
Si desea ejecutar un ejemplo de Fastapi, puede crear un repositorio simple que consiste en solo un Main.py archivo y un requisitos.txt.
Main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
requisitos.txt
fastapi
uvicorn
Cargar archivos
Si intenta cargar un archivo en un servidor y recibir un estado 413 con el mensaje de error “Error: la entidad de solicitud demasiado grande”es probable porque NGINX tiene un límite en el tamaño máximo de archivo que se puede cargar. Para resolver este problema, vaya al archivo de configuración de NGINX y especifique el tamaño máximo de archivo permitido utilizando el Client_max_body_size Directiva (configurarlo en 0 indica límite en los tamaños de archivo de entrada):
server {
listen 80;
server_name <PUBLIC_IP_ADDRESS>;
location / {
proxy_pass http://127.0.0.1:8000;
client_max_body_size 0;
}
}
Después de cambiar el archivo de configuración, no olvide reiniciar Nginx.
Conclusión
En este artículo, hemos aprendido cómo crear rápidamente una instancia de EC2 usando un servidor Fastapi como ejemplo. Aunque no seguimos las mejores prácticas de implementación y seguridad, el objetivo principal del artículo era proporcionar información mínima para que los principiantes lanzaran su primer servidor en AWS.
El siguiente paso lógico en la hoja de ruta de estudio de AWS sería crear múltiples instancias de EC2 y conectarlas entre sí.
Todas las imágenes a menos que se indique lo contrario el autor.