Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Estructure un proyecto de Python en una arquitectura hexagonal con AWS Lambda
Creado por Furkan Oruc (AWS), Dominik Goby (AWS), Darius Kunce (AWS) y Michal Ploski (AWS)
Resumen
Este patrón muestra cómo estructurar un proyecto de Python en una arquitectura hexagonal mediante AWS Lambda. El patrón utiliza el AWS Cloud Development Kit (AWS CDK) como herramienta de infraestructura como código (IaC), Amazon API Gateway como REST API y Amazon DynamoDB como capa de persistencia. La arquitectura hexagonal sigue los principios de diseño basados en el dominio. En la arquitectura hexagonal, el software consta de tres componentes: dominio, puertos y adaptadores. Para obtener información detallada sobre las arquitecturas hexagonales y sus ventajas, consulte la guía Creación de arquitecturas hexagonales en AWS.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa
Experiencia en Python
Familiaridad con AWS Lambda, AWS CDK, Amazon API Gateway y DynamoDB
Una GitHub cuenta (consulte las instrucciones para registrarse
) Git (consulte las instrucciones de instalación
) Un editor de código para realizar cambios e insertar el código GitHub (por ejemplo, Visual Studio Code
o JetBrains PyCharm ) Docker instalado y el daemon de Docker en funcionamiento
Versiones de producto
Git versión 2.24.3 o posterior
Python versión 3.7 o posterior
AWS CDK v2
Poetry versión 1.1.13 o posterior
AWS Lambda Powertools para Python, versión 1.25.6 o posterior
pytest versión 7.1.1 o posterior
Moto versión 3.1.9 o posterior
versión 1.9.0 o posterior de pydantic
Boto3 versión 1.22.4 o posterior
mypy-boto3-dynamodb versión 1.24.0 o posterior
Arquitectura
Pila de tecnología de destino
La pila de tecnología de destino consiste en un servicio de Python que utiliza API Gateway, Lambda y DynamoDB. El servicio utiliza un adaptador de DynamoDB para conservar los datos. Proporciona una función que utiliza Lambda como punto de entrada. El servicio usa Amazon API Gateway para exponer una REST API. La API utiliza AWS Identity and Access Management (IAM) para la autenticación de clientes.
Arquitectura de destino
Para ilustrar la implementación, este patrón despliega una arquitectura de destino sin servidor. Los clientes pueden enviar solicitudes a un punto de conexión final de API Gateway. API Gateway reenvía la solicitud a la función de Lambda de destino que implementa el patrón de arquitectura hexagonal. La función de Lambda realiza operaciones de creación, lectura, actualización y eliminación (CRUD) en una tabla de DynamoDB.
importanteEste patrón se probó en un entorno PoC. Debe realizar una revisión de seguridad para identificar el modelo de amenaza y crear una base de código segura antes de implementar cualquier arquitectura en un entorno de producción. |
---|

La API admite cinco operaciones en una entidad de producto:
GET /products
devuelve todos los productos.POST /products
crea un nuevo producto.GET /products/{id}
devuelve un producto específico.PUT /products/{id}
actualiza un producto específico.DELETE /products/{id}
elimina un producto específico.
Puede utilizar la siguiente estructura de carpetas para organizar el proyecto de forma que siga el patrón de arquitectura hexagonal:
app/ # application code
|--- adapters/ # implementation of the ports defined in the domain
|--- tests/ # adapter unit tests
|--- entrypoints/ # primary adapters, entry points
|--- api/ # api entry point
|--- model/ # api model
|--- tests/ # end to end api tests
|--- domain/ # domain to implement business logic using hexagonal architecture
|--- command_handlers/ # handlers used to execute commands on the domain
|--- commands/ # commands on the domain
|--- events/ # events triggered via the domain
|--- exceptions/ # exceptions defined on the domain
|--- model/ # domain model
|--- ports/ # abstractions used for external communication
|--- tests/ # domain tests
|--- libraries/ # List of 3rd party libraries used by the Lambda function
infra/ # infrastructure code
simple-crud-app.py # AWS CDK v2 app
Herramientas
Servicios de AWS
Amazon API Gateway
es un servicio totalmente gestionado que facilita a los desarrolladores la creación, publicación, mantenimiento, supervisión y protección APIs a cualquier escala. Amazon DynamoDB
es una base de datos NoSQL de valor clave, sin servidor y totalmente gestionada que está diseñada para ejecutar aplicaciones de alto rendimiento a cualquier escala. AWS Lambda
es un servicio de computación controlado por eventos sin servidor que permite ejecutar código para prácticamente cualquier tipo de aplicación o servicio backend, sin aprovisionar ni administrar servidores. Puede lanzar funciones de Lambda desde más de 200 aplicaciones de software como servicio (SaaS) y pagar solo por lo que utilice.
Herramientas
Git
se utiliza como sistema de control de versiones para el desarrollo de código en este patrón. Python
se utiliza como lenguaje de programación para este patrón. Python proporciona estructuras de datos de alto nivel y un enfoque de la programación orientada a objetos. AWS Lambda proporciona un tiempo de ejecución de Python integrado que simplifica el funcionamiento de los servicios de Python. Visual Studio Code
se utiliza como IDE para desarrollar y probar este patrón. Puede usar cualquier IDE que soporte el desarrollo de Python (por ejemplo, PyCharm ). AWS Cloud Development Kit (AWS CDK)
es un marco de desarrollo de software de código abierto que le permite definir los recursos de su aplicación en la nube utilizando lenguajes de programación conocidos. Este patrón utiliza la CDK para escribir e implementar la infraestructura de la nube como código. Poetry
se utiliza para gestionar las dependencias del patrón. AWS CDK utiliza Docker
para crear el paquete y la capa de Lambda.
Código
El código de este patrón está disponible en el repositorio de ejemplos de arquitectura hexagonal GitHub Lambda
Prácticas recomendadas
Para usar este patrón en un entorno de producción, siga estas prácticas recomendadas:
Utilice las claves administradas por el cliente en AWS Key Management Service (AWS KMS) para cifrar los grupos de CloudWatch registros de Amazon y las tablas de Amazon DynamoDB.
Configure AWS WAF para Amazon API Gateway para permitir el acceso únicamente desde la red de su organización.
Considere otras opciones para la autorización de API Gateway si IAM no satisface sus necesidades. Por ejemplo, puede usar grupos de usuarios de Amazon Cognito o autorizadores de Lambda de API Gateway.
Utilice Copias de seguridad de DynamoDB.
Configure las funciones de Lambda con una implementación de nube privada virtual (VPC) para mantener el tráfico de red dentro de la nube.
Actualice la configuración de origen permitida para la verificación previa del intercambio de recursos entre orígenes (CORS)
para restringir el acceso únicamente al dominio de origen solicitante. Utilice cdk-nag para comprobar las prácticas recomendadas de seguridad en el código de AWS CDK.
Considere la posibilidad de utilizar herramientas de escaneo de código para detectar problemas de seguridad comunes en el código. Por ejemplo, Bandit
es una herramienta diseñada para detectar problemas de seguridad comunes en el código Python. PIP-audit escanea los entornos de Python en busca de paquetes que tengan vulnerabilidades conocidas.
Este patrón utiliza AWS X-Ray
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree su propio repositorio. |
| Desarrollador de aplicaciones |
Instale las dependencias. |
| Desarrollador de aplicaciones |
Configure su IDE. | Recomendamos Visual Studio Code, pero puede usar cualquier IDE de su elección que sea compatible con Python. Los siguientes pasos son para Visual Studio Code.
| Desarrollador de aplicaciones |
Ejecute pruebas unitarias, opción 1: utilice Visual Studio Code. |
| Desarrollador de aplicaciones |
Ejecute pruebas unitarias, opción 2: utilice comandos del intérprete de comandos. |
| Desarrollador de aplicaciones |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Solicite credenciales temporales. | Para tener credenciales de AWS en el intérprete de comandos cuando ejecute | Desarrollador de aplicaciones, AWS DevOps |
Implemente la aplicación . |
| Desarrollador de aplicaciones, AWS DevOps |
Pruebe la API, opción 1: utilice la consola. | Utilice la consola de API Gateway para probar la API. Para obtener más información sobre las operaciones de la API y los mensajes de solicitud/respuesta, consulte la sección de uso de la API del archivo readme | Desarrollador de aplicaciones, AWS DevOps |
Pruebe la API, opción 2: utilice Postman. | Si quiere utilizar una herramienta como Postman
| Desarrollador de aplicaciones, AWS DevOps |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Redacte pruebas unitarias para el dominio empresarial. |
| Desarrollador de aplicaciones |
Implemente comandos y controladores de comandos. |
| Desarrollador de aplicaciones |
Escriba pruebas de integración para los adaptadores secundarios. |
| Desarrollador de aplicaciones |
Implemente adaptadores secundarios. |
| Desarrollador de aplicaciones |
Escribe end-to-end pruebas. |
| Desarrollador de aplicaciones |
Implemente los adaptadores principales. |
| Desarrollador de aplicaciones |
Recursos relacionados
Guía de APG
Referencias de AWS
Herramientas
IDEs