As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Estruture um projeto Python em arquitetura hexagonal usando Lambda AWS
Criado por Furkan Oruc (AWS), Dominik Goby (), Darius Kunce (AWS) e Michal Ploski (AWS) AWS
Ambiente: PoC ou piloto | Tecnologias: aplicativos web e móveis; contêineres e microsserviços; sem servidor; modernização | AWSserviços: Amazon DynamoDB; LambdaAWS; Amazon Gateway API |
Resumo
Esse padrão mostra como estruturar um projeto Python em arquitetura hexagonal usando o Lambda. AWS O padrão usa o AWS Cloud Development Kit (AWSCDK) como ferramenta de infraestrutura como código (IaC), o Amazon API Gateway como a e o REST API Amazon DynamoDB como camada de persistência. A arquitetura hexagonal segue os princípios de design orientados por domínio. Na arquitetura hexagonal, o software consiste em três componentes: domínio, portas e adaptadores. Para obter informações detalhadas sobre arquiteturas hexagonais e seus benefícios, consulte o guia Construindo arquiteturas hexagonais em. AWS
Pré-requisitos e limitações
Pré-requisitos
Uma AWS conta ativa
Experiência em Python
Familiaridade com AWS Lambda AWSCDK, API Amazon Gateway e DynamoDB
Uma GitHub conta (veja as instruções para se inscrever
) Git (consulte as instruções de instalação
) Um editor de código para fazer alterações e enviar seu código para GitHub (por exemplo, Visual Studio Code ou JetBrains PyCharm
) Docker instalado e o daemon do Docker instalado e funcionando
Versões do produto
Git versão 2.24.3 ou superior
Python versão 3.7 ou superior
AWSCDKv2
Poetry versão 1.1.13 ou superior
AWSLambda Powertools para Python versão 1.25.6 ou posterior
pytest versão 7.1.1 ou superior
Moto versão 3.1.9 ou superior
pydantic versão 1.9.0 ou superior
Boto3 versão 1.22.4 ou superior
mypy-boto3-dynamodb versão 1.24.0 ou superior
Arquitetura
Pilha de tecnologias de destino
A pilha de tecnologia de destino consiste em um serviço Python que API usa Gateway, Lambda e DynamoDB. O serviço usa um adaptador do DynamoDB para manter os dados. Ele fornece uma função que usa o Lambda como ponto de entrada. O serviço usa o Amazon API Gateway para expor um RESTAPI. O API usa AWS Identity and Access Management (IAM) para a autenticação de clientes.
Arquitetura de destino
Para ilustrar a implementação, esse padrão implanta uma arquitetura de destino com tecnologia sem servidor. Os clientes podem enviar solicitações para um endpoint do API Gateway. APIO gateway encaminha a solicitação para a função Lambda de destino que implementa o padrão de arquitetura hexagonal. A função Lambda executa operações de criação, leitura, atualização e exclusão (CRUD) em uma tabela do DynamoDB.
Importante: esse padrão foi testado em um ambiente de PoC. Você deve realizar uma análise de segurança para identificar o modelo de ameaça e criar uma base de código segura antes de implantar qualquer arquitetura em um ambiente de produção. |
---|
O API suporta cinco operações em uma entidade de produto:
GET /products
devolve todos os produtos.POST /products
cria um novo produto.GET /products/{id}
retorna um produto específico.PUT /products/{id}
atualiza um produto específico.DELETE /products/{id}
exclui um produto específico.
Você pode usar a seguinte estrutura de pastas para organizar seu projeto de acordo com o padrão de arquitetura 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
Ferramentas
AWSserviços
O Amazon API Gateway
é um serviço totalmente gerenciado que facilita para os desenvolvedores criar, publicar, manter, monitorar e proteger APIs em qualquer escala. O Amazon DynamoDB
é um banco de dados SQL No totalmente gerenciado, sem servidor e de valor-chave, projetado para executar aplicativos de alto desempenho em qualquer escala. AWSO Lambda
é um serviço de computação sem servidor e orientado por eventos que permite executar código para praticamente qualquer tipo de aplicativo ou serviço de back-end sem provisionar ou gerenciar servidores. Você pode iniciar funções do Lambda a partir de mais de 200 AWS serviços e aplicativos de software como serviço (SaaS) e pagar apenas pelo que usar.
Ferramentas
O Git
é usado como sistema de controle de versão para desenvolvimento de código nesse padrão. O Python
é usado como linguagem de programação para esse padrão. O Python fornece estruturas de dados de alto nível e uma abordagem à programação orientada a objetos. AWSO Lambda fornece um tempo de execução Python incorporado que simplifica a operação dos serviços Python. O Visual Studio Code
é usado IDE para desenvolvimento e teste desse padrão. Você pode usar qualquer um IDE que ofereça suporte ao desenvolvimento em Python (por exemplo, PyCharm ). AWSO Cloud Development Kit (AWSCDK
) é uma estrutura de desenvolvimento de software de código aberto que permite definir seus recursos de aplicativos em nuvem usando linguagens de programação conhecidas. Esse padrão usa o CDK para escrever e implantar a infraestrutura de nuvem como código. O Poetry
é usado para gerenciar dependências no padrão. O Docker
é usado pelo AWS CDK para criar o pacote e a camada Lambda.
Código
O código desse padrão está disponível no repositório de amostras da arquitetura hexagonal GitHub Lambda
Práticas recomendadas
Para usar esse padrão em um ambiente de produção, siga essas práticas recomendadas:
Use chaves gerenciadas pelo cliente no AWS Key Management Service (AWSKMS) para criptografar grupos de CloudWatch log da Amazon e tabelas do Amazon DynamoDB.
Configure AWSWAFo Amazon API Gateway para permitir o acesso somente da rede da sua organização.
Considere outras opções de autorização do API Gateway se IAM não atender às suas necessidades. Por exemplo, você pode usar grupos de usuários do Amazon Cognito ou autorizadores do Gateway API Lambda.
Use backups do DynamoDB.
Configure as funções do Lambda com uma implantação de nuvem privada virtual (VPC) para manter o tráfego de rede dentro da nuvem.
Atualize a configuração de origem permitida para o preflight de compartilhamento de recursos de origem cruzada (CORS)
para restringir o acesso somente ao domínio de origem solicitante. Use cdk-nag para verificar o AWS CDK código e ver as melhores práticas de segurança.
Considere o uso de ferramentas de digitalização de código para encontrar problemas de segurança comuns no código. Por exemplo, o Bandit
é uma ferramenta projetada para encontrar problemas de segurança comuns no código Python. O PIP-Audit verifica os ambientes do Python em busca de pacotes que contenham tenham vulnerabilidades conhecidas.
Esse padrão usa o AWSX-Ray
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie seu próprio repositório. |
| Desenvolvedor de aplicativos |
Instale as dependências. |
| Desenvolvedor de aplicativos |
Configure seuIDE. | Recomendamos o Visual Studio Code, mas você pode usar qualquer um IDE de sua escolha que ofereça suporte a Python. As etapas a seguir são para o Visual Studio Code.
| Desenvolvedor de aplicativos |
Execute testes de unidade, opção 1: usando o Visual Studio Code. |
| Desenvolvedor de aplicativos |
Execute testes de unidade, opção 2: usando comandos shell. |
| Desenvolvedor de aplicativos |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Solicite credenciais temporárias. | Para ter AWS credenciais no shell durante a execução | Desenvolvedor de aplicativos, AWS DevOps |
Implante o aplicativo . |
| Desenvolvedor de aplicativos, AWS DevOps |
Teste API a opção 1: Use o console. | Use o console do API Gateway para testar API o. Para obter mais informações sobre API operações e mensagens de solicitação/resposta, consulte a seção de API uso do arquivo readme no repositório | Desenvolvedor de aplicativos, AWS DevOps |
Teste a API opção 2: Use o Postman. | Se você quiser usar uma ferramenta como o Postman
| Desenvolvedor de aplicativos, AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Escreva testes de unidade para o domínio comercial. |
| Desenvolvedor de aplicativos |
Implemente comandos e manipuladores de comandos. |
| Desenvolvedor de aplicativos |
Escreva testes de integração para adaptadores secundários. |
| Desenvolvedor de aplicativos |
Implemente adaptadores secundários. |
| Desenvolvedor de aplicativos |
Escreva end-to-end testes. |
| Desenvolvedor de aplicativos |
Implemente adaptadores primários. |
| Desenvolvedor de aplicativos |
Recursos relacionados
APGguia
AWSReferências
Ferramentas
IDEs