

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á.

# Processe eventos de forma assíncrona com o Amazon API Gateway e o AWS Lambda
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed e Michael Wallner, da Amazon Web Services*

## Resumo
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-summary"></a>

[O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) é um serviço totalmente gerenciado que os desenvolvedores podem usar para criar, publicar, manter, monitorar e proteger APIs em qualquer escala. Ele lida com as tarefas envolvidas na aceitação e processamento de até centenas de milhares de chamadas de API simultâneas.

Uma cota de serviço importante do API Gateway é o tempo limite de integração. O tempo limite é o tempo máximo em que um serviço de back-end deve retornar uma resposta antes que a API REST retorne um erro. O limite rígido de 29 segundos geralmente é aceitável para cargas de trabalho síncronas. No entanto, esse limite representa um desafio para os desenvolvedores que desejam usar o API Gateway com cargas de trabalho assíncronas.

Esse padrão mostra um exemplo de arquitetura para processar eventos de forma assíncrona usando o API Gateway e. AWS Lambda A arquitetura suporta a execução de trabalhos de processamento com duração de até 15 minutos e usa uma API REST básica como interface.

[O [Projen](https://pypi.org/project/projen/) é usado para configurar o ambiente de desenvolvimento local e implantar a arquitetura de exemplo em um destino Conta da AWS, em combinação com o [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), o [Docker](https://docs.docker.com/get-docker/) e o Node.js.](https://nodejs.org/en/download/) O Projen configura automaticamente um ambiente virtual [Python](https://www.python.org/downloads/) com [pré-confirmação](https://pre-commit.com/) e as ferramentas usadas para garantia de qualidade de código, verificação de segurança e teste de unidade. Para obter mais informações, consulte a seção [Ferramentas](#process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools).

## Pré-requisitos e limitações
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ As seguintes ferramentas instaladas em sua estação de trabalho:
  + [AWS Cloud Development Kit (AWS CDK) Kit de ferramentas versão 2.85.0](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
  + [Docker versão 20.10.21](https://docs.docker.com/get-docker/)
  + [Node.js](https://nodejs.org/en/download/) versão 18.13.0
  + [Versão do projeto 0.71.111](https://pypi.org/project/projen/)
  + [Python versão 3.9.16](https://www.python.org/downloads/)

**Limitações**
+ O tempo de execução máximo de um trabalho é limitado pelo tempo de execução máximo das funções Lambda (15 minutos).
+ O número máximo de solicitações de trabalho simultâneas é limitado pela simultaneidade reservada da função Lambda.

## Arquitetura
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-architecture"></a>

O diagrama a seguir mostra a interação da API de trabalhos com as funções Lambda de processamento e tratamento de erros de eventos, com eventos armazenados em um arquivo de eventos da Amazon. EventBridge 

![](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e027130c-44c1-41ab-bbe9-f196a49bd9ac/images/3c437b65-48e3-477d-aeea-6ff938cc3285.png)


Um fluxo de trabalho típico inclui as seguintes etapas:

1. Você se autentica no AWS Identity and Access Management (IAM) e obtém credenciais de segurança.

1. Você envia uma `POST` solicitação HTTP para o endpoint da API `/jobs` jobs, especificando os parâmetros do trabalho no corpo da solicitação.

1. A API de jobs, que é uma API REST do API Gateway, retorna para você uma resposta HTTP que contém o identificador do trabalho.

1. A API de trabalhos invoca de forma assíncrona a função Lambda de processamento de eventos.

1. A função de processamento de eventos processa o evento e, em seguida, coloca os resultados do trabalho na tabela de trabalhos do Amazon DynamoDB

1. Você envia uma `GET` solicitação HTTP para o endpoint da API de `/jobs/{jobId}` trabalhos, com o identificador do trabalho da etapa 3 como`{jobId}`.

1. A API de jobs consulta a tabela do `jobs` DynamoDB para recuperar os resultados do trabalho.

1. A API de trabalhos retorna uma resposta HTTP que contém os resultados do trabalho.

1. Se o processamento do evento falhar, a função de processamento de eventos enviará o evento para a função de tratamento de erros.

1. A função de tratamento de erros coloca os parâmetros do trabalho na tabela do DynamoDB`jobs`.

1. Você pode recuperar os parâmetros do trabalho enviando uma `GET` solicitação HTTP para o endpoint da API `/jobs/{jobId}` jobs.

1. Se o tratamento de erros falhar, a função de tratamento de erros enviará o evento para um arquivo de EventBridge eventos.

   Você pode reproduzir os eventos arquivados usando. EventBridge

## Ferramentas
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools"></a>

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que ajuda você a interagir com os serviços da AWS por meio de comandos em seu shell de linha de comando.
+ O [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.
+  EventBridgeA [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, funções Lambda, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

**Outras ferramentas**
+ [autopep8 formata](https://github.com/hhatto/autopep8) automaticamente o código Python com base no guia de estilo Python Enhancement Proposal (PEP) 8.
+ O [Bandit](https://bandit.readthedocs.io/en/latest/) escaneia o código Python para encontrar problemas comuns de segurança.
+ [O Commitizen é um verificador](https://commitizen-tools.github.io/commitizen/) e gerador de commits do Git. `CHANGELOG`
+ [cfn-lint é um linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ O [Checkov](https://github.com/bridgecrewio/checkov) é uma ferramenta estática de análise de código que verifica a infraestrutura como código (IaC) em busca de configurações incorretas de segurança e conformidade.
+ O [jq](https://stedolan.github.io/jq/download/) é uma ferramenta de linha de comando para analisar JSON.
+ O [Postman](https://www.postman.com/) é uma plataforma de API.
+ [pre-commit](https://pre-commit.com/) é um gerenciador de ganchos do Git.
+ [O Projen](https://github.com/projen/projen) é um gerador de projetos.
+ [pytest ](https://docs.pytest.org/en/7.2.x/index.html)é uma estrutura Python para escrever testes pequenos e legíveis.

**Repositório de código**

Esse exemplo de código de arquitetura pode ser encontrado no [Processamento GitHub assíncrono de eventos com o API Gateway e o repositório Lambda](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk).

## Práticas recomendadas
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-best-practices"></a>
+ Esse exemplo de arquitetura não inclui o monitoramento da infraestrutura implantada. Se seu caso de uso exigir monitoramento, avalie a adição de [construções de monitoramento CDK](https://constructs.dev/packages/cdk-monitoring-constructs) ou outra solução de monitoramento.
+ Esse exemplo de arquitetura usa [permissões do IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar o acesso à API de trabalhos. Qualquer pessoa autorizada a assumir o `JobsAPIInvokeRole` poderá invocar a API de trabalhos. Como tal, o mecanismo de controle de acesso é binário. Se seu caso de uso exigir um modelo de autorização mais complexo, avalie usando um [mecanismo de controle de acesso](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) diferente.
+ Quando um usuário envia uma `POST` solicitação HTTP para o endpoint da API `/jobs` jobs, os dados de entrada são validados em dois níveis diferentes:
  + O Amazon API Gateway é responsável pela [validação da primeira solicitação](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html).
  + A função de processamento de eventos executa a segunda solicitação.

    Nenhuma validação é realizada quando o usuário faz uma `GET` solicitação HTTP para o endpoint da API `/jobs/{jobId}` jobs. Se seu caso de uso exigir validação adicional de entrada e um maior nível de segurança, avalie [o uso do AWS WAF para proteger sua API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).

## Épicos
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-epics"></a>

### Configurar o ambiente
<a name="set-up-the-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o repositório localmente, execute o seguinte comando:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk.git</pre> | DevOps engenheiro | 
| Configure o projeto. | [Mude o diretório para a raiz do repositório e configure o ambiente virtual Python e todas as ferramentas usando o Projen:](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-lambda-cdk<br />npx projen</pre> | DevOps engenheiro | 
| Instale ganchos de pré-confirmação. | Para instalar ganchos de pré-confirmação, faça o seguinte:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | DevOps engenheiro | 

### Implemente a arquitetura de exemplo
<a name="deploy-the-example-architecture"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Bootstrap AWS CDK. | Para inicializar AWS CDK no seu Conta da AWS, execute o seguinte comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Implante a arquitetura de exemplo. | Para implantar a arquitetura de exemplo no seu Conta da AWS, execute o seguinte comando:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Testar a arquitetura
<a name="test-the-architecture"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale os pré-requisitos de teste. | [Instale em sua estação de trabalho o [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), o [Postman](https://www.postman.com/downloads/) e o jq.](https://jqlang.github.io/jq/)<br />O uso do [Postman](https://www.postman.com/downloads/) para testar essa arquitetura de exemplo é sugerido, mas não obrigatório. Se você escolher uma ferramenta alternativa de teste de API, certifique-se de que ela seja compatível com a [autenticação AWS Signature versão 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) e consulte os endpoints de API expostos que podem ser inspecionados [exportando a](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html) API REST. | DevOps engenheiro | 
| Suponha que `JobsAPIInvokeRole` o. | [Suponha](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) `JobsAPIInvokeRole` que o que foi impresso como saída do comando deploy:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Configure o Postman. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | AWS DevOps | 
| Teste a arquitetura de exemplo. | Para testar a arquitetura de exemplo, [envie solicitações](https://learning.postman.com/docs/sending-requests/requests/#next-steps) para a API de trabalhos. Para obter mais informações, consulte a [documentação do Postman](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps engenheiro | 

## Solução de problemas
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| A destruição e a reimplantação subsequente da arquitetura de exemplo falham porque o [grupo de CloudWatch logs do Amazon Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/apigateway/JobsAPIAccessLogs` já existe. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | 

## Recursos relacionados
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-resources"></a>
+ [Modelo de mapeamento do API Gateway e referência de variável de registro de acesso](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Configurar a invocação assíncrona da função Lambda de back-end](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html)