

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

# Sem servidor
<a name="serverless-pattern-list"></a>

**Topics**
+ [Crie um aplicativo móvel React Native de tecnologia sem servidor usando o AWS Amplify](build-a-serverless-react-native-mobile-app-by-using-aws-amplify.md)
+ [Gerenciar locatários em vários produtos de SaaS em um único ambiente de gerenciamento](manage-tenants-across-multiple-saas-products-on-a-single-control-plane.md)
+ [Consolidação da geração de URLs assinados previamente do Amazon S3 e o download de objetos por meio de um endpoint associado a endereços IP estáticos](consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.md)
+ [Crie uma EventBridge conexão entre contas da Amazon em uma organização](create-cross-account-amazon-eventbridge-connection-organization.md)
+ [Entregue registros do DynamoDB para o Amazon S3 usando o Kinesis Data Streams e o Firehose com AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.md)
+ [Implementação do versionamento de APIs baseado em caminhos usando domínios personalizados no Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Importe a biblioteca psycopg2 para interagir com seu banco AWS Lambda de dados PostgreSQL](import-psycopg2-library-lambda.md)
+ [Integre o Amazon API Gateway com o Amazon SQS para lidar com REST assíncrono APIs](integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.md)
+ [Processe eventos de forma assíncrona com o Amazon API Gateway e o AWS Lambda](process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.md)
+ [Processe eventos de forma assíncrona com o Amazon API Gateway e o Amazon DynamoDB Streams](processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.md)
+ [Processe eventos de forma assíncrona com o Amazon API Gateway, o Amazon SQS e o AWS Fargate](process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.md)
+ [Execute tarefas do AWS Systems Manager Automation de forma síncrona a partir do AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Execute leituras paralelas de objetos do S3 usando Python em uma função AWS Lambda](run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.md)
+ [Envie dados de telemetria de AWS Lambda para OpenSearch para análise e visualização em tempo real](send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.md)
+ [Configuração de um roteador celular sem servidor para uma arquitetura baseada em células](serverless-cell-router-architecture.md)
+ [Configuração do acesso privado a um bucket do Amazon S3 por meio de um endpoint da VPC](set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.md)
+ [Solucione problemas de estados AWS Step Functions usando o Amazon Bedrock](troubleshooting-states-in-aws-step-functions.md)
+ [Mais padrões](serverless-more-patterns-pattern-list.md)

# Crie um aplicativo móvel React Native de tecnologia sem servidor usando o AWS Amplify
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify"></a>

*Deekshitulu Pentakota, Amazon Web Services*

## Resumo
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-summary"></a>

Esse padrão mostra como criar um backend de tecnologia sem servidor para um aplicativo móvel React Native usando o AWS Amplify e os seguintes serviços da AWS:
+ AWS AppSync
+ Amazon Cognito
+ Amazon DynamoDB

Depois de configurar e implantar o backend do aplicativo usando o Amplify, o Amazon Cognito autentica os usuários do aplicativo e os autoriza a acessar o aplicativo. AppSync Em seguida, a AWS interage com o aplicativo de front-end e com uma tabela de back-end do DynamoDB para criar e buscar dados.

**nota**  
Esse padrão usa um aplicativo simples ToDoList "" como exemplo, mas você pode usar um procedimento semelhante para criar qualquer aplicativo móvel React Native.

## Pré-requisitos e limitações
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ [Amplify Command Line Interface (Amplify CLI)](https://docs.amplify.aws/cli/start/install/), instalada e configurada
+ XCode (qualquer versão)
+ Microsoft Visual Studio (qualquer versão, qualquer editor de código, qualquer editor de texto)
+ Familiaridade com o Amplify
+ Familiaridade com o Amazon Cognito
+ Familiaridade com a AWS AppSync
+ Familiaridade com o DynamoDB
+ Familiaridade com Node.js
+ Familiaridade com o npm 
+ Familiaridade com React e React Native
+ Familiaridade com JavaScript e ( ECMAScript 6) ES6
+ Familiaridade com o GraphQL

## Arquitetura
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-architecture"></a>

O diagrama a seguir mostra um exemplo de arquitetura para executar o backend de um aplicativo móvel React Native na Nuvem AWS:

![\[Fluxo de trabalho para executar uma aplicação móvel com React Native usando os serviços da AWS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c95e0150-5762-4c90-946c-efa3a22913e4/images/5beff5f9-9d14-49dc-a046-b74e5bfbd13f.png)


O diagrama mostra a seguinte arquitetura:

1. O Amazon Cognito autentica os usuários do aplicativo e os autoriza a acessar o aplicativo.

1. Para criar e buscar dados, a AWS AppSync usa uma API GraphQL para interagir com o aplicativo de front-end e uma tabela de back-end do DynamoDB.

## Ferramentas
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-tools"></a>

**Serviços da AWS**
+ O [AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) é um conjunto de ferramentas e recursos desenvolvidos especificamente para permitir aos desenvolvedores de frontend para a web e dispositivos móveis criarem aplicações de full-stack de forma rápida e fácil na AWS.
+  AppSyncA [AWS](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) fornece uma interface GraphQL escalável que ajuda os desenvolvedores de aplicativos a combinar dados de várias fontes, incluindo Amazon DynamoDB, AWS Lambda e HTTP. APIs
+ O [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornece autenticação, autorização e gerenciamento de usuários para suas aplicações Web e móveis.
+ 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.

**Código **

O código do aplicativo de amostra usado nesse padrão está disponível no ios-todo-app repositório GitHub [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Para usar os arquivos de amostra, siga as instruções na seção **Épicos** desse padrão.

## Épicos
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-epics"></a>

### Crie e execute seu aplicativo React Native
<a name="create-and-run-your-react-native-app"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configurar um ambiente de desenvolvimento React Native.  | Para obter instruções, consulte [Configurando o ambiente de desenvolvimento](https://reactnative.dev/docs/next/environment-setup) na documentação do React Native. | Desenvolvedor de aplicativos | 
| Crie e execute o aplicativo móvel ToDoList React Native no iOS Simulator. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desenvolvedor de aplicativos | 

### Inicializar um ambiente de backend para a aplicação
<a name="initialize-a-new-backend-environment-for-the-app"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os serviços de backend necessários para oferecer suporte ao aplicativo no Amplify.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para a configuração do ToDoList aplicativo usada nesse padrão, aplique o exemplo de configuração a seguir.**Exemplo de configurações do aplicativo React Native Amplify**<pre>? Name: ToDoListAmplify<br /><br />? Environment: dev<br /><br />? Default editor: Visual Studio Code<br /><br />? App type: javascript<br /><br />? Javascript framework: react-native<br /><br />? Source Directory Path: src<br /><br />? Distribution Directory Path: /<br /><br />? Build Command: npm run-script build<br /><br />? Start Command: npm run-script start<br /><br />? Select the authentication method you want to use: AWS profile<br /><br />? Please choose the profile you want to use: default</pre>Para obter mais informações, consulte [Criar um novo backend do Amplify](https://docs.amplify.aws/lib/project-setup/create-application/q/platform/js/#create-a-new-amplify-backend) na documentação do Amplify Dev Center.O `amplify init` comando provisiona os seguintes recursos usando a [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desenvolvedor de aplicativos | 

### Adicione a autenticação do Amazon Cognito ao seu aplicativo Amplify React Native
<a name="add-amazon-cognito-authentication-to-your-amplify-react-native-app"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um serviço de autenticação do Amazon Cognito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para a configuração do ToDoList aplicativo usada nesse padrão, aplique o exemplo de configuração a seguir.**Exemplo de configurações do serviço de autenticação**<pre>? Do you want to use the default authentication and security configuration? \ <br />Default configuration<br /> <br />? How do you want users to be able to sign in? \ <br />Username <br /><br />? Do you want to configure advanced settings? \ <br />No, I am done</pre>O comando`amplify add auth` cria as pastas necessárias, os arquivos e os arquivos de dependência em uma pasta local (**amplify**) localizada no diretório raiz do projeto. Para a configuração do ToDoList aplicativo usada nesse padrão, o **aws-exports.js** é criado para essa finalidade. | Desenvolvedor de aplicativos | 
| Implante o serviço do Amazon Cognito na Nuvem AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para visualizar os serviços implantados no seu projeto, acesse o console do Amplify executando o seguinte comando:`amplify console` | Desenvolvedor de aplicativos | 
| Instale as bibliotecas Amplify necessárias para o React Native e as CocoaPods dependências para iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desenvolvedor de aplicativos | 
| Importe e configure o serviço Amplify. | No arquivo de ponto de entrada do aplicativo (por exemplo, **App.js**), importe e carregue o arquivo de configuração do serviço Amplify inserindo as seguintes linhas de código:<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)</pre>Se ocorrer um erro após importar o serviço Amplify no arquivo de entrada da aplicação, interrompa a aplicação. Em seguida, abra XCode e selecione **ToDoListAmplifyo.xcworkspace** na pasta iOS do projeto e execute o aplicativo. | Desenvolvedor de aplicativos | 
| Atualize o arquivo de ponto de entrada do seu aplicativo para usar o componente withAuthenticator Higher-Order (HOC). | O HOC`withAuthenticator` fornece fluxos de login, cadastro e recuperação de senha na aplicação com apenas algumas linhas de código. Para obter mais informações, consulte [Opção 1: usar componentes de interface de usuário pré-criados](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js/#option-1-use-pre-built-ui-components) no Amplify Dev Center. Além disso, [componentes de ordem superior na documentação](https://reactjs.org/docs/higher-order-components.html) do React.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)**Exemplo de código HOC WithAuthenticator**<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)<br />import { withAuthenticator } from 'aws-amplify-react-native';<br /><br /><br />const App = () => {<br />  return null;<br />};<br /><br /><br />export default withAuthenticator(App);</pre>No simulador iOS, a aplicação mostra a tela de login disponibilizada pelo serviço Amazon Cognito. | Desenvolvedor de aplicativos | 
| Teste a configuração do serviço de autenticação. | No iOS Simulator, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Você também pode abrir o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/) e verificar se um novo usuário foi criado, ou não, no **Banco de identidades**. | Desenvolvedor de aplicativos | 

### Conecte uma AppSync API da AWS e um banco de dados do DynamoDB ao aplicativo
<a name="connect-an-aws-appsync-api-and-dynamodb-database-to-the-app"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma AppSync API da AWS e um banco de dados do DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para a configuração do ToDoList aplicativo usada nesse padrão, aplique o exemplo de configuração a seguir.**Exemplo de configurações de API e banco de dados**<pre>? Please select from one of the below mentioned services: \ <br />GraphQL <br /><br />? Provide API name: todolistamplify<br /><br />? Choose the default authorization type for the API \ <br />Amazon Cognito User Pool<br /><br />Do you want to use the default authentication and security configuration<br /><br />? Default configuration How do you want users to be able to sign in? \ <br />Username<br /><br />Do you want to configure advanced settings? \ <br />No, I am done.<br /><br />? Do you want to configure advanced settings for the GraphQL API \ <br />No, I am done.<br /><br />? Do you have an annotated GraphQL schema? \ <br />No<br /><br />? Choose a schema template: \ <br />Single object with fields (e.g., "Todo" with ID, name, description)<br /><br />? Do you want to edit the schema now? \ <br />Yes</pre>**Exemplo de esquema GraphQL**<pre> type Todo @model {<br />   id: ID!<br />   name: String!<br />   description: String<br />}</pre> | Desenvolvedor de aplicativos | 
| Implante a AppSync API da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Para a configuração do ToDoList aplicativo usada nesse padrão, aplique o exemplo de configuração a seguir.**Exemplo de configurações AppSync da API AWS**A configuração a seguir cria a API GraphQL na AWS AppSync e uma tabela **Todo** no Dynamo DB.<pre> ? Are you sure you want to continue? Yes<br />? Do you want to generate code for your newly created GraphQL API Yes<br />? Choose the code generation language target javascript<br />? Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.js<br />? Do you want to generate/update all possible GraphQL operations - \ <br />queries, mutations and subscriptions Yes<br />? Enter maximum statement depth \<br />[increase from default if your schema is deeply nested] 2</pre> | Desenvolvedor de aplicativos | 
| Conecte o front-end do aplicativo à AppSync API da AWS. | Para usar o ToDoList aplicativo de exemplo fornecido nesse padrão, copie o código do arquivo **App.js** no ios-todo-app GitHub repositório [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Em seguida, integre o código de exemplo em seu ambiente local.O código de exemplo fornecido no arquivo **App.js** do repositório faz o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-resources"></a>
+ [AWS Amplify](https://aws.amazon.com/amplify/)
+ [Amazon Cognito](https://aws.amazon.com/cognito/)
+ [AWS AppSync](https://aws.amazon.com/appsync/)
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)
+ [React](https://reactjs.org/) (documentação do React) 

# Gerenciar locatários em vários produtos de SaaS em um único ambiente de gerenciamento
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane"></a>

*Ramanna Avancha, Kishan Kavala, Anusha Mandava e Jenifer Pascal, Amazon Web Services*

## Resumo
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-summary"></a>

Esse padrão mostra como gerenciar os ciclos de vida dos inquilinos em vários produtos de software como serviço (SaaS) em um único ambiente de gerenciamento na Nuvem AWS. A arquitetura de referência fornecida pode ajudar as organizações a reduzir a implementação de recursos redundantes e compartilhados em seus produtos SaaS individuais e fornecer eficiências de governança em grande escala.

Grandes empresas podem ter vários produtos SaaS em várias unidades de negócios. Esses produtos geralmente precisam ser provisionados para uso por locatários externos em diferentes níveis de assinatura. Sem uma solução comum para locatários, os administradores de TI devem gastar tempo gerenciando recursos indiferenciados em vários SaaS APIs, em vez de se concentrarem no desenvolvimento dos principais recursos do produto.

A solução comum para locatários fornecida nesse padrão pode ajudar a centralizar o gerenciamento de muitos dos recursos compartilhados do produto SaaS de uma organização, incluindo o seguinte:
+ Segurança
+ Provisionamento de locatários
+ Armazenamento de dados do locatário
+ Comunicações do locatário
+ Gerenciamento de produtos
+ Registro em log e monitoramento de métricas

## Pré-requisitos e limitações
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Conhecimento do Amazon Cognito ou de um provedor de identidades (IdP) terceirizado
+ Conhecimento do Amazon API Gateway
+ Conhecimento do AWS Lambda
+ Conhecimento do Amazon DynamoDB
+ Conhecimento do AWS Identity and Access Management (IAM)
+ Conhecimento do AWS Step Functions
+ Conhecimento da AWS CloudTrail e da Amazon CloudWatch
+ Conhecimento de bibliotecas e códigos Python
+ Conhecimento de SaaS APIs, incluindo os diferentes tipos de usuários (organizações, inquilinos, administradores e usuários de aplicativos), modelos de assinatura e modelos de isolamento de inquilinos
+ Conhecimento dos requisitos de SaaS de vários produtos e das assinaturas de vários locatários de sua organização

**Limitações**
+ As integrações entre a solução de locatário comum e os produtos SaaS individuais não são abordadas nesse padrão.
+ Esse padrão implanta o serviço Amazon Cognito somente em uma única região da AWS.

## Arquitetura
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-architecture"></a>

**Pilha de tecnologias de destino**
+ Amazon API Gateway
+ Amazon Cognito
+ AWS CloudTrail
+ Amazon CloudWatch
+ Amazon DynamoDB
+ IAM
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon Simple Notiﬁcation Service (Amazon SNS)
+ AWS Step Functions

**Arquitetura de destino**

O diagrama a seguir mostra um exemplo de fluxo de trabalho para gerenciar os ciclos de vida dos locatários em vários produtos SaaS em um único ambiente de gerenciamento na Nuvem AWS.

![\[Fluxo de trabalho para o gerenciamento de ciclos de vida de locatários em um único ambiente de gerenciamento.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/4306bc76-22a7-45ca-a107-43df6c6f7ac8/images/700faf4d-c28f-4814-96aa-2d895cdcb518.png)


 O diagrama mostra o seguinte fluxo de trabalho:

1. Um usuário da AWS inicia o provisionamento de locatários, o provisionamento de produtos ou ações relacionadas à administração fazendo uma chamada para um endpoint do API Gateway.

1. O usuário é autenticado por um token de acesso restaurado de um grupo de usuários do Amazon Cognito ou de outro IdP.

1. As tarefas individuais de provisionamento ou administração são executadas por funções do Lambda que são integradas aos endpoints da API Gateway API.

1. A administração da solução comum APIs para inquilinos (para inquilinos, produtos e usuários) reúne todos os parâmetros de entrada, cabeçalhos e tokens necessários. Em seguida, a administração APIs invoca as funções Lambda associadas.

1. As permissões do IAM para as funções de administração APIs e do Lambda são validadas pelo serviço IAM.

1. As funções do Lambda armazenam e recuperam dados dos catálogos (para locatários, produtos e usuários) no DynamoDB e no Amazon S3.

1. Depois que as permissões são validadas, um fluxo de trabalho do AWS Step Functions é invocado para realizar uma tarefa específica. O exemplo no diagrama mostra um fluxo de trabalho de provisionamento de locatários.

1. As tarefas individuais do fluxo de trabalho do AWS Step Functions são executadas em um fluxo de trabalho predeterminado (máquina de estado).

1. Todos os dados essenciais necessários para executar a função do Lambda associada a cada tarefa de fluxo de trabalho são recuperados do DynamoDB ou do Amazon S3. Outros recursos da AWS talvez precisem ser provisionados usando um modelo da AWS CloudFormation .

1. Se necessário, o fluxo de trabalho envia uma solicitação para provisionar recursos adicionais da AWS para um produto SaaS específico para a conta da AWS desse produto.

1. Quando a solicitação é bem-sucedida ou falha, o fluxo de trabalho publica a atualização de status como uma mensagem para um tópico do Amazon SNS.

1. O Amazon SNS está inscrito no tópico do Amazon SNS do fluxo de trabalho Step Functions.

1. Em seguida, o Amazon SNS envia a atualização do status do fluxo de trabalho para o usuário da AWS.

1. Os registros das ações de cada serviço da AWS, incluindo uma trilha de auditoria das chamadas de API, são enviados para CloudWatch. Regras e alarmes específicos podem ser configurados CloudWatch para cada caso de uso.

1. Os logs são arquivados em buckets do Amazon S3 para fins de auditoria.

**Automação e escala**

Esse padrão usa um CloudFormation modelo para ajudar a automatizar a implantação da solução comum para locatários. O modelo também pode ajudar a aumentar ou reduzir a escala verticalmente para os recursos associados com rapidez.

Para obter mais informações, consulte Como [trabalhar com CloudFormation modelos da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) no *Guia CloudFormation do usuário da AWS*.

## Ferramentas
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-tools"></a>

**Serviços da AWS**
+ [O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.
+ O [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornece autenticação, autorização e gerenciamento de usuários para suas aplicações Web e móveis.
+  CloudTrailA [AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) ajuda você a auditar a governança, a conformidade e o risco operacional da sua conta da AWS.
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ajuda você a monitorar as métricas dos seus recursos da AWS e dos aplicativos que você executa na AWS em tempo real.
+ 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.
+ O [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda você 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.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ O [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.
+ O [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) é um serviço de orquestração com tecnologia sem servidor que permite combinar funções do AWS Lambda e outros serviços da AWS para criar aplicações essenciais aos negócios.

## Práticas recomendadas
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-best-practices"></a>

A solução nesse padrão usa um único ambiente de gerenciamento para gerenciar a integração de vários locatários e fornecer acesso a vários produtos SaaS. O ambiente de gerenciamento ajuda os usuários administrativos a gerenciar outros quatro ambientes específicos de atributos:
+ Plano de segurança
+ Plano de fluxo de trabalho
+ Plano de comunicação
+ Registro e ambiente de monitoramento

## Épicos
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-epics"></a>

### Configurar o plano de segurança
<a name="configure-the-security-plane"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Estabeleça os requisitos para sua plataforma SaaS multilocatária. | Estabeleça requisitos detalhados para:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Arquiteto de nuvem, administrador de sistemas da AWS | 
| Configurar o serviço do Amazon Cognito. | Siga as instruções em [Introdução ao Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-getting-started.html) no *Guia do Desenvolvedor do Amazon Cognito*. | Arquiteto de nuvem | 
| Configure as políticas do IAM necessárias. | Crie as políticas do IAM necessárias para o seu caso de uso. Em seguida, mapeie as políticas para funções do IAM no Amazon Cognito.Para obter mais informações, consulte [Gerenciamento de acesso usando políticas](https://docs.aws.amazon.com/cognito/latest/developerguide/security-iam.html#security_iam_access-manage) e [Controle de acesso baseado em funções](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html) no *Guia do Desenvolvedor do Amazon Cognito*. | Administrador de nuvem, arquiteto de nuvem, segurança do AWS IAM | 
| Configure as permissões de API necessárias.  | Configure as permissões de acesso ao API Gateway usando perfis e políticas do IAM e autorizadores do Lambda.Para obter instruções, consulte as seguintes seções do *Guia do Desenvolvedor do Amazon API Gateway*:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Administrador de nuvem, arquiteto de nuvem | 

### Configurar o plano de dados
<a name="configure-the-data-plane"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os catálogos de dados necessários. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obter mais informações, consulte [Configuração do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SettingUp.html) no *Guia do desenvolvedor Amazon DynamoDB*. | DBA | 

### Configurar o ambiente de gerenciamento
<a name="configure-the-control-plane"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie funções Lambda e API Gateway APIs para executar as tarefas necessárias do plano de controle. | Crie funções Lambda e API Gateway separados APIs para adicionar, excluir e gerenciar o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obter mais informações, consulte [Como usar o AWS Lambda com o Amazon API Gateway](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html) no *Guia do desenvolvedor do AWS Lambda*. | Desenvolvedor de aplicativos | 

### Configurar o plano do fluxo de trabalho
<a name="configure-the-workflow-plane"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Identifique as tarefas que os fluxos de trabalho do AWS Step Functions devem executar. | Identifique e documente os requisitos detalhados do fluxo de trabalho do AWS Step Functions para o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Certifique-se de que as partes interessadas essenciais aprovem os requisitos. | Proprietário do App | 
| Crie os fluxos de trabalho necessários do AWS Step Functions. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Desenvolvedor de aplicativos, líder de criação | 

### Configurar o plano de comunicação
<a name="configure-the-communication-plane"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie tópicos do Amazon SNS. | Crie tópicos do Amazon SNS para receber notificações sobre:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Para obter mais informações, consulte [Criar um tópico do SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) no *Guia do desenvolvedor do Amazon SNS*. | Proprietário do aplicativo, arquiteto de nuvem | 
| Assine endpoints em cada tópico do Amazon SNS. | Para receber mensagens publicadas em um tópico do Amazon SNS, você precisa inscrever um endpoint em cada tópico.Para obter instruções, consulte [Assinatura de um tópico do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) no *Guia do desenvolvedor do Amazon SNS*. | Desenvolvedor de aplicativos, arquiteto de nuvem | 

### Configurar o plano de registro em log e monitoramento
<a name="configure-the-logging-and-monitoring-plane"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Ative o registro para cada componente da solução comum de locatário. | Ative o registro no nível do componente para cada recurso na solução de locatário comum que você criou.Para instruções, consulte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)É possível consolidar os logs de cada recurso em uma conta de registro em log centralizada usando políticas do IAM. Para obter mais informações, consulte [Registro centralizado e barreiras de proteção de várias contas](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/centralized-logging-and-multiple-account-security-guardrails.html). | Desenvolvedor de aplicativos, administrador de sistemas da AWS, administrador de nuvem | 

### Provisione e implante a solução comum para locatários
<a name="provision-and-deploy-the-common-tenant-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie CloudFormation modelos. | Automatize a implantação e a manutenção da solução de locatário comum completa e de todos os seus componentes usando CloudFormation modelos.Para obter mais informações, consulte o [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html). | Desenvolvedor de aplicativos, DevOps engenheiro, CloudFormation desenvolvedor | 

## Recursos relacionados
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-resources"></a>
+ [Controlar o acesso a uma API REST usando um grupo de usuários do Amazon Cognito como autorizador](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) (*Guia do desenvolvedor do Amazon API Gateway*)
+ [Use autorizadores Lambda do API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (*(Guia do Desenvolvedor do Amazon API Gateway*)
+ [Grupos de usuários do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) (*Guia do Desenvolvedor do Amazon Cognito*)
+ [ CloudWatch Console entre contas e regiões](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) (Guia do * CloudWatch usuário da Amazon*)

# Consolidação da geração de URLs assinados previamente do Amazon S3 e o download de objetos por meio de um endpoint associado a endereços IP estáticos
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses"></a>

*Song Jin, Eunhye Jo e Jun Soung Lee, Amazon Web Services*

## Resumo
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-summary"></a>

Esse padrão simplifica o acesso ao Amazon Simple Storage Service (Amazon S3) criando um padrão seguro e personalizado para downloads de objetos. URLs A solução fornece um único endpoint com um domínio exclusivo e endereços IP estáticos. É voltada para clientes que precisam consolidar tanto endpoints de API quanto do Amazon S3 sob um domínio unificado com endereços IP estáticos. O caso de uso consiste em usuários que adotam uma política de firewall com lista de permissões de IPs e domínios, restringindo o acesso à API a domínios e endereços IP específicos. 

A arquitetura emprega chaves Serviços da AWS, incluindo AWS Global Accelerator Amazon API Gateway AWS Lambda, Application Load Balancer AWS PrivateLink e Amazon S3. Esse design centraliza a API para gerar o endpoint pré-assinado URLs e o Amazon S3 em um único domínio, vinculado a um acelerador com dois endereços IP estáticos. Consequentemente, os usuários podem facilmente solicitar objetos pré-assinados do Amazon S3 URLs e baixá-los por meio de um endpoint de domínio unificado com endereços IP estáticos. 

Essa arquitetura é especialmente útil para clientes com políticas rigorosas ou requisitos de conformidade, como os dos setores público, médico e financeiro.

## Pré-requisitos e limitações
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Uma zona hospedada pública para o seu domínio personalizado
+ Um domínio importado em AWS Certificate Manager (ACM) no Região da AWS de sua escolha

**Limitações**
+ O bucket do Amazon S3 deve ter um nome que coincida com o nome de domínio do endpoint. Esse requisito garante que o endpoint do Amazon S3 possa ser disponibilizado por meio de um único endpoint de API.
+ O nome de domínio personalizado usado no API Gateway deve estar alinhado com o nome de domínio do endpoint único da API.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-architecture"></a>

O diagrama apresentado a seguir ilustra a arquitetura de destino e o fluxo de trabalho para este padrão.

![\[Componentes e fluxo de trabalho para geração de URL assinado previamente e download de objetos.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


O diagrama ilustra o seguinte conceito e fluxo de trabalho:

1. Um usuário inicia uma solicitação para gerar um URL pré-assinado usando o endpoint personalizado servido por meio do AWS Global Accelerator nome de domínio personalizado e os endereços IP associados.

1. Uma função do Lambda gera o URL assinado previamente e direcionado ao endpoint personalizado. A resposta consiste em um redirecionamento 301 que contém o URL assinado previamente gerado. Por meio do URL assinado previamente e redirecionado, o usuário realiza o download do objeto automaticamente pelo endpoint personalizado que é fornecido pelo Global Accelerator.

Os componentes da arquitetura geral para a geração de URL assinado previamente e o fluxo de download de objetos são os seguintes:
+ Provisionamento de endereços IP estáticos pelo Global Accelerator.
+ Registro do alias do acelerador como um registro A na zona hospedada pública do Amazon Route 53 com o nome de domínio personalizado.
+ Criação de um bucket do Amazon S3 com um nome de bucket que corresponda ao nome de domínio personalizado registrado.
+ Criação de endpoints da VPC para o API Gateway e para o serviço Amazon S3.
+ Configuração de um Application Load Balancer voltado para uso interno, conectado ao Global Accelerator.
+ Atribuição de um domínio personalizado para o API Gateway, com certificado do ACM associado.
+ Implantação de um API Gateway privado integrado com uma função do Lambda.
+ A função Lambda é equipada com uma função AWS Identity and Access Management (IAM) anexada (com [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)permissões).

## Ferramentas
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-tools"></a>

**Serviços da AWS**
+ [O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.
+ Os [Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) distribuem o tráfego de entrada do aplicativo em vários destinos, como instâncias do Amazon Elastic Compute Cloud (Amazon EC2), em várias zonas de disponibilidade.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) ajuda você a criar, armazenar e renovar certificados e chaves SSL/TLS X.509 públicos e privados que protegem seus AWS sites e aplicativos.
+ [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.
+ O [AWS Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html) é um serviço global com suporte para endpoints em várias Regiões da AWS. Você pode criar aceleradores que direcionam o tráfego para endpoints ideais na rede AWS global. Isso melhora a disponibilidade e o desempenho de seus aplicativos da Internet que são usados por um público global.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ 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.
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)ajuda você a criar conexões unidirecionais e privadas de suas nuvens privadas virtuais (VPCs) para serviços fora da VPC.
+ O [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) é um serviço web de DNS altamente disponível e escalável.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Outras ferramentas**
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.

**Repositório de código**

Você pode implantar esse padrão usando o AWS CDK ou o Terraform de acordo com sua preferência. A seção [Épicos](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics) contém instruções para ambos os métodos de implantação. O código desse padrão está disponível nos seguintes GitHub repositórios:
+ **AWS CDK**— [s3- -cdk presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk)
+ **Terraform** — [s3](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform) - -terraform presignedurl-staticips-endpoint-with

## Práticas recomendadas
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ Para reforçar a segurança no ambiente de produção, é fundamental implementar mecanismos de autorização, como o [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html), para restringir o acesso à API de geração `PresignedUrl`.
+ Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics"></a>

### Prepare o ambiente
<a name="prepare-the-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Defina qual será o nome de domínio. | Decida qual nome de domínio público será usado para o endpoint unificado do Amazon S3. O nome de domínio também é usado como o nome do bucket do Amazon S3. | Administrador da AWS e administrador de rede | 
| Crie uma zona hospedada pública. | [Crie uma zona hospedada pública](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) no Amazon Route 53. O nome de domínio deve corresponder ao nome de domínio usado no API Gateway. | Administrador da AWS e administrador de rede | 
| Providencie um certificado SSL. | Use AWS Certificate Manager (ACM) para [solicitar](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) ou [importar](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) um certificado SSL para o domínio do seu aplicativo web. | Administrador da AWS e administrador de rede | 

### Implantação do padrão com o Terraform
<a name="deploy-the-pattern-with-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o ambiente de desenvolvimento do Terraform. | Para configurar o ambiente de desenvolvimento, realize as seguintes ações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador da AWS, administrador de nuvem | 
| Modifique os arquivos `.tfvars` e** **`provider.tf`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Observe o seguinte:**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador da AWS, administrador de nuvem | 
| Provisione os recursos de rede. | Para provisionar recursos de rede, execute os seguintes comandos:<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>Durante a execução do comando `apply `, digite **sim** quando solicitado. | Administrador da AWS, administrador de nuvem | 
| Provisione o API Gateway, o Amazon S3 e o Lambda. | Para provisionar recursos de rede, use os seguintes comandos:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | Administrador da AWS, administrador de nuvem | 

### Implante o padrão com AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o ambiente AWS CDK de desenvolvimento. | Para configurar o ambiente de desenvolvimento, realize as seguintes ações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador da AWS, administrador de nuvem | 
| Defina as configurações de domínio no arquivo `config/index.ts`. | Para editar as opções da variável constante, use os seguintes comandos:<pre>export const options = {<br />    certificateArn: '{arn of the acm which created before}',<br />    dnsAttr: {<br />        zoneName: '{public hosted zone name}',<br />        hostedZoneId: 'hosted zone Id',<br />    },<br />    domainNamePrefix: '{Prefix for the domain}',<br />    presignPath: 'presign',<br />    objectsPath: 'objects',<br />};</pre>Nos comandos, substitua cada espaço reservado pelas suas próprias informações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrador da AWS, administrador de nuvem | 
| Implante as pilhas. | Para implantar duas pilhas, uma para a nuvem privada virtual (VPC) e outra para a aplicação, use o seguinte comando:<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | Administrador da AWS, administrador de nuvem | 

### Teste do padrão
<a name="test-the-pattern"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique os endereços IP do endpoint. | Para verificar se o domínio deste padrão conta com endereços IP estáticos, use o seguinte comando:<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | Administrador de rede | 
| Faça o upload de um arquivo de teste que você poderá baixar posteriormente. | Faça o upload do arquivo de teste para a pasta `'/objects'` no bucket do Amazon S3. | Administrador da AWS, administrador de nuvem | 
| Invoque a API para gerar um URL assinado previamente. | Para gerar um URL assinado previamente, acesse o URL por meio de um navegador ou de um cliente de API (por exemplo, o [Postman](https://www.postman.com/product/what-is-postman/)) usando o seguinte formato:<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>Substitua os valores de espaço reservado em `${s3-bucket-prefix}` e `${domain}` pelos valores que você definiu nas etapas anteriores. | Proprietário do App | 
| Verifique o resultado. | O resultado esperado é a obtenção do código de status de redirecionamento 301 (Movido permanentemente). Essa resposta conterá o URL assinado previamente, que deverá iniciar automaticamente o download do arquivo de teste. | Engenheiro de testes | 

### Limpeza com o Terraform
<a name="clean-up-with-terraform"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova os recursos do API Gateway, do Amazon S3 e do Lambda. | Para excluir recursos, use os seguintes comandos:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrador da AWS, administrador de nuvem | 
| Remova os recursos de rede. | Para excluir recursos de rede, use os seguintes comandos:<pre>cd ./1.vpc_alb_ga<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrador da AWS, administrador de nuvem | 

### Limpe com AWS CDK
<a name="clean-up-with-cdk"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova as pilhas. | Para remover as pilhas da VPC e da aplicação, use o seguinte comando:<pre>$ cdk destroy --all</pre> | Administrador da AWS, administrador de nuvem | 
| Esvazie e exclua os buckets do Amazon S3. | [Esvazie](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) e [exclua](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) o bucket de objetos do Amazon S3 e o bucket de logs do Amazon S3 que não são excluídos por padrão.Os nomes dos buckets do Amazon S3 são `${s3-bucket-prefix}.${domain}` e `${s3-bucket-prefix}.${domain}-logs`.Se você preferir usar a [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) para excluir os buckets, execute os seguintes comandos:<pre>$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force<br />$ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force</pre>Substitua `${s3-bucket-prefix}` e `${domain}` pelos valores que você definiu nas etapas anteriores.,/p> | Administrador da AWS, administrador de nuvem | 

## Recursos relacionados
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-resources"></a>

**AWS Blogs**
+ [Acessando um Amazon API Gateway por meio de endereços IP estáticos fornecidos por AWS Global Accelerator](https://aws.amazon.com/blogs/networking-and-content-delivery/accessing-an-aws-api-gateway-via-static-ip-addresses-provided-by-aws-global-accelerator/) 
+ [Gere um URL pré-assinado em formato modular AWS CDK para JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Hospedagem de sites estáticos HTTPS internos com ALB, S3 e PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 

# Crie uma EventBridge conexão entre contas da Amazon em uma organização
<a name="create-cross-account-amazon-eventbridge-connection-organization"></a>

*Sam Wilson e Robert Stone, Amazon Web Services*

## Resumo
<a name="create-cross-account-amazon-eventbridge-connection-organization-summary"></a>

Grandes sistemas distribuídos usam EventBridge a Amazon para comunicar mudanças de estado entre várias contas da Amazon Web Services (AWS) em uma AWS Organizations organização. No entanto, geralmente EventBridge é capaz de atingir apenas endpoints ou consumidores no mesmo Conta da AWS. A exceção consiste em um barramento de eventos em outra conta. Esse barramento de eventos é um destino válido. Para que eventos de um barramento de eventos em outra conta possam ser consumidos, esses eventos devem ser enviados do barramento de eventos da conta de origem para o barramento de eventos da conta de destino. Para evitar desafios ao gerenciar eventos críticos em aplicativos diferentes Contas da AWS, use a abordagem recomendada apresentada nesse padrão.

Esse padrão ilustra como implementar uma arquitetura orientada a eventos EventBridge que envolva vários Contas da AWS em uma organização. AWS Organizations O padrão usa o AWS Cloud Development Kit (AWS CDK) Toolkit e. AWS CloudFormation

EventBridge oferece um barramento de eventos sem servidor que ajuda você a receber, filtrar, transformar, rotear e entregar eventos. Um componente essencial das arquiteturas orientadas por eventos, EventBridge suporta a separação entre produtores de mensagens e consumidores dessas mensagens. Em uma única conta, isso é simples. Uma estrutura com várias contas requer considerações adicionais para que eventos no barramento de eventos de uma conta possam ser consumidos por outras contas na mesma organização.

Para obter informações sobre considerações específicas de conta para produtores e consumidores, consulte a seção [Informações adicionais](#create-cross-account-amazon-eventbridge-connection-organization-additional).

## Pré-requisitos e limitações
<a name="create-cross-account-amazon-eventbridge-connection-organization-prereqs"></a>

**Pré-requisitos **
+ Uma AWS Organizations organização com pelo menos dois associados Contas da AWS
+ Uma função AWS Identity and Access Management (IAM) em ambos Contas da AWS que permite provisionar infraestrutura em ambos Contas da AWS usando AWS CloudFormation
+ O Git [instalado localmente](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ AWS Command Line Interface (AWS CLI) [instalado localmente](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ AWS CDK [instalado localmente](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) e [inicializado em ambos](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) Contas da AWS

**Versões do produto**

O desenvolvimento e os testes deste padrão foram realizados com as seguintes ferramentas e versões:
+ AWS CDK Kit de ferramentas 2.126.0
+ Node.js 18.19.0
+ npm 10.2.3
+ Python 3.12

Esse padrão deve funcionar com qualquer versão da AWS CDK v2 ou npm. As versões do Node.js de 13.0.0 a 13.6.0 não são compatíveis com o AWS CDK.

## Arquitetura
<a name="create-cross-account-amazon-eventbridge-connection-organization-architecture"></a>

**Arquitetura de destino**

O diagrama apresentado a seguir ilustra o fluxo de trabalho da arquitetura para enviar um evento de uma conta e consumi-lo em outra conta.

![\[O processo em três etapas para conectar a conta produtora de origem à conta consumidora de destino.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/34a5f3ae-511d-4636-999f-c73396770117/images/ccc4878a-6281-4a77-a483-4e6f299d7807.png)


O fluxo de trabalho contém as seguintes etapas:

1. A AWS Lambda função Producer na conta Source coloca um evento no barramento de EventBridge eventos da conta.

1. A EventBridge regra entre contas encaminha o evento para um barramento de EventBridge eventos na conta de destino.

1. O barramento de EventBridge eventos na conta de destino tem uma regra Lambda de destino que invoca a função Consumer Lambda.

Uma prática recomendada é empregar uma [fila de mensagens não entregues (DLQ, na sigla em inglês)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) para gerenciar falhas nas invocações da função do Lambda com papel de consumidora. No entanto, a DLQ foi omitida desta solução para facilitar a compreensão. Para saber mais sobre como implementar uma DLQ em seus fluxos de trabalho e melhorar a capacidade de recuperação de falhas, consulte a postagem do blog [Implementando padrões de tratamento de AWS Lambda erros](https://aws.amazon.com/blogs/compute/implementing-aws-lambda-error-handling-patterns/).

**Automação e escala**

AWS CDK provisiona automaticamente a arquitetura necessária. EventBridge pode escalar para milhares de registros por segundo, dependendo do Região da AWS. Para obter mais informações, consulte a [documentação de EventBridge cotas da Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html).

## Ferramentas
<a name="create-cross-account-amazon-eventbridge-connection-organization-tools"></a>

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código. Esse padrão usa o [AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html), um kit de desenvolvimento em nuvem de linha de comando que ajuda você a interagir com seu AWS CDK aplicativo.
+  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, AWS Lambda funções, 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.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)é um serviço de gerenciamento de contas que ajuda você a consolidar várias Contas da AWS em uma organização que você cria e gerencia centralmente.

**Outras ferramentas**
+ [O Node.js](https://nodejs.org/en/docs/) é um ambiente de tempo de JavaScript execução orientado a eventos projetado para criar aplicativos de rede escaláveis.
+ O [npm](https://docs.npmjs.com/about-npm) é um registro de software executado em um ambiente Node.js e usado para compartilhar ou emprestar pacotes e gerenciar a implantação de pacotes privados.
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [cross-account-eventbridge-in-organization](https://github.com/aws-samples/aws-cdk-examples/tree/main/python/cross-account-eventbridge-in-organization).

## Práticas recomendadas
<a name="create-cross-account-amazon-eventbridge-connection-organization-best-practices"></a>

Para conhecer as melhores práticas ao trabalhar com EventBridge, consulte os seguintes recursos:
+ [Melhores práticas para padrões de EventBridge eventos da Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-patterns-best-practices.html)
+ [Melhores práticas ao definir regras na Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules-best-practices.html)

## Épicos
<a name="create-cross-account-amazon-eventbridge-connection-organization-epics"></a>

### Prepare seu ambiente AWS CDK de implantação local
<a name="prepare-your-local-cdk-deployment-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure as credenciais locais para a conta de origem e para a conta de destino. | Consulte [Setting up new configuration and credentials](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new) e escolha o método de autenticação e de credencial mais adequado ao seu ambiente.Certifique-se de configurar a autenticação da conta AWS CLI de origem e da conta de destino.Estas instruções partem do pressuposto de que você já configurou dois perfis da AWS localmente: `sourceAccount` e `destinationAccount`. | Desenvolvedor de aplicativos | 
| Inicialize os dois Contas da AWS. | Para inicializar as contas, execute os seguintes comandos:<pre>cdk bootstrap --profile sourceAccount<br />cdk bootstrap --profile destinationAccount</pre> | Desenvolvedor de aplicativos | 
| Clone o código do padrão. | Para clonar o repositório, execute o seguinte comando:<pre>git clone git@github.com:aws-samples/aws-cdk-examples.git</pre>Em seguida, altere o diretório para a pasta do projeto recém-clonada:<pre>cd aws-cdk-examples/python/cross-account-eventbridge-in-organization</pre> | Desenvolvedor de aplicativos | 

### Implante ProducerStack na conta de origem
<a name="deploy-producerstack-to-the-source-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Modifique `cdk.json` com seus detalhes AWS Organizations e da conta. | Na pasta raiz do projeto, realize as seguintes alterações em `cdk.json`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desenvolvedor de aplicativos | 
| Implante os ProducerStack recursos. | Execute o seguinte comando usando o diretório raiz do projeto:<pre>cdk deploy ProducerStack --profile sourceAccount</pre>Quando solicitado, aceite as novas funções do IAM e outras permissões relacionadas à segurança criadas por meio de. AWS CloudFormation | Desenvolvedor de aplicativos | 
| Verifique se os ProducerStack recursos estão implantados. | Para verificar os recursos, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desenvolvedor de aplicativos | 

### ConsumerStack Implantar na conta de destino
<a name="deploy-consumerstack-to-the-destination-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante os ConsumerStack recursos. | Execute o seguinte comando usando o diretório raiz do projeto:<pre>cdk deploy ConsumerStack --profile destinationAccount</pre>Quando solicitado, aceite as novas funções do IAM e outras permissões relacionadas à segurança criadas por meio de. CloudFormation | Desenvolvedor de aplicativos | 
| Verifique se os ConsumerStack recursos estão implantados | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desenvolvedor de aplicativos | 

### Produção e consumo de eventos
<a name="produce-and-consume-events"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Invoque a função do Lambda com perfil de produtora. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desenvolvedor de aplicativos | 
| Verifique se o evento foi recebido. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Desenvolvedor de aplicativos | 

### Limpeza
<a name="cleanup"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Destrua os ConsumerStack recursos. | Se você estiver usando este padrão como teste, limpe os recursos implantados para evitar custos adicionais.Execute o seguinte comando usando o diretório raiz do projeto:<pre>cdk destroy ConsumerStack --profile destinationAccount</pre>Você receberá uma solicitação para confirmar a exclusão da pilha. | Desenvolvedor de aplicativos | 
| Destrua os ProducerStack recursos. | Execute o seguinte comando usando o diretório raiz do projeto:<pre>cdk destroy ProducerStack --profile sourceAccount</pre>Você receberá uma solicitação para confirmar a exclusão da pilha. | Desenvolvedor de aplicativos | 

## Solução de problemas
<a name="create-cross-account-amazon-eventbridge-connection-organization-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Nenhum evento foi recebido na conta de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | 
| A invocação de uma função do Lambda usando o console retorna o seguinte erro: `User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke` | Entre em contato com seu Conta da AWS administrador para receber as permissões de `lambda:Invoke` ação apropriadas na função `ProducerStack-ProducerLambdaXXXX` Lambda. | 

## Recursos relacionados
<a name="create-cross-account-amazon-eventbridge-connection-organization-resources"></a>

**Referências**
+ [AWS Organizations Guia do usuário](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
+ [Padrões de EventBridge eventos da Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Regras na Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

**Tutoriais e vídeos**
+ [Tutorial: Creating and configuration an organization](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)
+ [AWS re:Invent 2023 — Padrões avançados baseados em eventos com a Amazon (01-R) EventBridge COM3](https://www.youtube.com/watch?v=6X4lSPkn4ps)

## Mais informações
<a name="create-cross-account-amazon-eventbridge-connection-organization-additional"></a>

**Regra do produtor**

Na conta Source, um barramento de EventBridge eventos é criado para aceitar mensagens dos produtores (conforme mostrado na seção *Arquitetura*). Uma regra, juntamente com as permissões do IAM correspondentes, é criada nesse barramento de eventos. As regras têm como alvo o barramento de EventBridge eventos na conta de destino com base na seguinte `cdk.json` estrutura:

```
"rules": [
  {
    "id": "CrossAccount",
    "sources": ["Producer"],
    "detail_types": ["TestType"],
    "targets": [
      {
        "id": "ConsumerEventBus",
        "arn": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount"
      }
    ]
  }
]
```

Para cada barramento de eventos consumidor, o padrão de eventos e o barramento de eventos de destino devem ser incluídos.

*Padrão de evento*

Os [padrões de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) filtram a quais eventos esta regra se aplicará. Para as finalidades deste exemplo, as origens de eventos e os `detail_types` dos registros identificam quais eventos serão transmitidos do barramento de eventos da conta de origem para o barramento de eventos da conta de destino.

*Barramento de eventos de destino*

Esta regra é destinada a um barramento de eventos que existe em outra conta. É necessário fornecer o `arn` (nome do recurso da Amazon) completo para identificar de forma exclusiva o barramento de eventos de destino, e o `id` é o [identificador lógico](https://docs.aws.amazon.com/cdk/v2/guide/identifiers.html#identifiers_logical_ids) usado pelo AWS CloudFormation. O barramento de eventos de destino não precisa existir de fato no momento da criação da regra de destino.

**Considerações específicas sobre a conta de destino**

Na conta de destino, um barramento de EventBridge eventos é criado para receber mensagens do barramento de eventos da conta de origem. Para permitir que os eventos sejam publicados usando a conta de origem, é necessário criar uma [política baseada em recursos](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html):

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "AllowOrgToPutEvents",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount",
    "Condition": {
      "StringEquals": {
        "aws:PrincipalOrgID": "o-XXXXXXXXX"
      }
    }
  }]
}
```

Conceder a permissão `events:PutEvents` é particularmente importante, pois ela autoriza qualquer conta da mesma organização a publicar eventos para este barramento de eventos. Ao definir `aws:PrincipalOrgId` como o ID da organização, as permissões necessárias são garantidas.

**Padrão de evento**

Você pode modificar o padrão de eventos fornecido conforme as necessidades do seu caso de uso:

```
rule = events.Rule(
    self,
    self.id + 'Rule' + rule_definition['id'],
    event_bus=event_bus,
    event_pattern=events.EventPattern(
        source=rule_definition['sources'],
        detail_type=rule_definition['detail_types'],
    )
)
```

A fim de evitar processamento desnecessário, o padrão de eventos deve especificar que somente os eventos a serem processados pela conta de destino sejam transmitidos para o barramento de eventos da conta de destino.

*Política baseada em recursos*

Este exemplo usa o ID da organização para controlar quais contas têm permissão para enviar eventos para o barramento de eventos da conta de destino. Considere usar uma política mais restritiva, como especificar a conta de origem.

*EventBridge cotas*

Considere as seguintes [cotas](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html):
+ O limite de cotas padrão é de 300 regras por barramento de eventos. Esse número pode ser expandido, se necessário, mas atende à maioria dos casos de uso.
+ Cinco destinos, por regra, é o máximo permitido. Recomendamos que os arquitetos de aplicações empreguem uma regra distinta para cada conta de destino, a fim de permitir um controle mais detalhado sobre o padrão de eventos.

# Entregue registros do DynamoDB para o Amazon S3 usando o Kinesis Data Streams e o Firehose com AWS CDK
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk"></a>

*Shashank Shrivastava e Daniel Matuki da Cunha, Amazon Web Services*

## Resumo
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-summary"></a>

Este padrão fornece código de amostra e uma aplicação para entregar registros do Amazon DynamoDB ao Amazon Simple Storage Service (Amazon S3) usando o Amazon Kinesis Data Streams e o Amazon Data Firehose. A abordagem do padrão usa [construções AWS Cloud Development Kit (AWS CDK) L3](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) e inclui um exemplo de como realizar a transformação de dados AWS Lambda antes que os dados sejam entregues ao bucket S3 de destino na Amazon Web Services ()AWS Cloud.

O Kinesis Data Streams registra alterações no nível de item em tabelas do DynamoDB e as replica no fluxo de dados do Kinesis requerido. Seus aplicativos podem acessar o fluxo de dados do Kinesis e visualizar as alterações no nível do item em tempo quase real. O Kinesis Data Streams também fornece acesso a outros serviços da Amazon Kinesis, como o Firehose e o Amazon Managed Service for Apache Flink. Isso significa desenvolver aplicativos para fornecer painéis em tempo real, gerar alertas, implementar definições de preço e de publicidade dinâmicas, além de executar análises de dados sofisticadas.

Você pode usar esse padrão para seus casos de uso de integração de dados. Por exemplo, veículos de transporte ou equipamentos industriais podem enviar grandes volumes de dados para uma tabela do DynamoDB. Esses dados podem então ser transformados e armazenados em um data lake hospedado no Amazon S3. Em seguida, é possível consultar e processar os dados e prever potenciais defeitos usando serviços com tecnologia sem servidor, como o Amazon Athena, o Amazon Redshift Spectrum, o Amazon Rekognition e o AWS Glue.

## Pré-requisitos e limitações
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-prereqs"></a>

*Pré-requisitos *
+ Um ativo Conta da AWS.
+ AWS Command Line Interface (AWS CLI), instalado e configurado. Para obter mais informações, consulte [Introdução ao AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) na AWS CLI documentação.
+ Node.js (18.x\$1) e npm, instalados e configurados. Para obter mais informações, consulte [Como baixar e instalar o Node.js e o npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) na documentação do `npm`.
+ aws-cdk (2.x\$1), devidamente instalado e configurado. Para obter mais informações, consulte [Introdução ao AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) na AWS CDK documentação.
+ O repositório GitHub [aws-dynamodb-kinesisfirehose-sde 3 ingestões](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/), clonado e configurado em sua máquina local.
+ Dados de amostra existentes para a tabela do DynamoDB. Deve usar o seguinte formato: `{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}`

## Arquitetura
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-architecture"></a>

O diagrama apresentado a seguir ilustra um exemplo de fluxo de trabalho para entregar registros do DynamoDB ao Amazon S3 usando o Kinesis Data Streams e o Firehose.

![\[Um exemplo de fluxo de trabalho para entregar registros do DynamoDB ao Amazon S3 usando o Kinesis Data Streams e o Firehose.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e2a9c412-312e-4900-9774-19a281c578e4/images/6e6df998-e6c2-4eaf-b263-ace752194689.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Os dados são ingeridos usando o Amazon API Gateway como proxy para o DynamoDB. Você também pode usar qualquer outra origem para ingerir dados no DynamoDB. 

1. As alterações no nível do item são geradas quase em tempo real no Kinesis Data Streams para entrega ao Amazon S3.

1. O Kinesis Data Streams envia os registros ao Firehose para transformação e entrega. 

1. Uma função do Lambda converte os registros de um formato de registro do DynamoDB para o formato JSON, que contém somente os nomes e valores dos atributos do item de registro.

## Ferramentas
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-tools"></a>

*Serviços da AWS*
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda a definir e a provisionar a infraestrutura da Nuvem AWS por meio de código.
+ AWS CDK O [Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) é um kit de desenvolvimento em nuvem de linha de comando que ajuda você a interagir com seu AWS CDK aplicativo.
+ [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 Serviços da AWS por meio de comandos em seu shell de linha de comando.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS

*Repositório de código*

O código desse padrão está disponível no repositório de GitHub [aws-dynamodb-kinesisfirehose-s3 ingestões.](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/)

## Épicos
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-epics"></a>

### Instalar e configurar o código de amostra
<a name="set-up-and-configure-the-sample-code"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale as dependências. | Em sua máquina local, instale as dependências dos arquivos `package.json` nos diretórios `pattern/aws-dynamodb-kinesisstreams-s3` e `sample-application` e executando os seguintes comandos:<pre>cd <project_root>/pattern/aws-dynamodb-kinesisstreams-s3 </pre><pre>npm install && npm run build</pre><pre>cd <project_root>/sample-application/</pre><pre>npm install && npm run build</pre>  | Desenvolvedor de aplicativos, AWS geral | 
| Gere o CloudFormation modelo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Desenvolvedor de aplicativos, AWS geral, AWS DevOps | 

### Implantar os recursos
<a name="deploy-the-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique e implante os recursos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Desenvolvedor de aplicativos, AWS geral, AWS DevOps | 

### Ingira dados na tabela do DynamoDB para testar a solução
<a name="ingest-data-into-the-dynamodb-table-to-test-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inclua dados de amostra na tabela do DynamoDB. | Envie uma solicitação para sua tabela do DynamoDB executando o seguinte comando em: AWS CLI`aws dynamodb put-item --table-name <your_table_name> --item '{"<table_partition_key>": {"S": "<partition_key_ID>"},"MessageData":{"S": "<data>"}}'`exemplo:`aws dynamodb put-item --table-name SourceData_table --item '{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}'`Por padrão, o `put-item` não retornará nenhum valor como saída se a operação for bem-sucedida. Se a operação falhar, ela retornará um erro. Os dados são armazenados no DynamoDB e, em seguida, enviados para o Kinesis Data Streams e para o Firehose. Você usa diferentes abordagens para adicionar dados em uma tabela do DynamoDB. Para obter mais informações, consulte [Carregamento de dados em tabelas](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.LoadData.html) na documentação do DynamoDB. | Desenvolvedor de aplicativos | 
| Verifique se um novo objeto é criado no bucket do S3. | Faça login Console de gerenciamento da AWS e monitore o bucket do S3 para verificar se um novo objeto foi criado com os dados que você enviou. Para obter mais informações, consulte [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)a documentação do Amazon S3. | Desenvolvedor de aplicativos, AWS geral | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpar os recursos.  | Execute o comando `cdk destroy` para excluir todos os recursos usados por esse padrão. | Desenvolvedor de aplicativos, AWS geral | 

## Recursos relacionados
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ [s3- static-site-stack .ts (repositório](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/use_cases/aws-s3-static-website/lib/s3-static-site-stack.ts#L25)) GitHub 
+ [aws-apigateway-dynamodb módulo](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb) (GitHub repositório)
+ [aws-kinesisstreams-kinesisfirehose-sMódulo 3](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-kinesisstreams-kinesisfirehose-s3) (GitHub repositório)
+ [Capturar dados de alterações para o DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html) (documentação do DynamoDB)
+ [Use o Kinesis Data Streams para capturar alterações do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html) (documentação do DynamoDB)

# Implementação do versionamento de APIs baseado em caminhos usando domínios personalizados no Amazon API Gateway
<a name="implement-path-based-api-versioning-by-using-custom-domains"></a>

*Corey Schnedl, Marcelo Barbosa, Mario Lopez Martinez, Anbazhagan Ponnuswamy, Gaurav Samudra e Abhilash Vinod, Amazon Web Services*

## Resumo
<a name="implement-path-based-api-versioning-by-using-custom-domains-summary"></a>

Este padrão demonstra como você pode usar o recurso de [mapeamentos de API](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mappings.html) de [domínios personalizados](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) para implementar uma solução de versionamento de APIs baseado em caminhos para o Amazon API Gateway.

O Amazon API Gateway é um serviço totalmente gerenciado que você pode usar para criar, publicar, manter, monitorar e proteger APIs em qualquer escala. Ao usar o recurso de domínio personalizado do serviço, você pode criar nomes de domínio personalizados que são mais simples e mais intuitivos URLs que você pode fornecer aos usuários da API. Você usa mapeamentos de API para conectar estágios de API a um nome de domínio personalizado. Depois de criar um nome de domínio e configurar os registros DNS, você usa mapeamentos de API para enviar tráfego para você APIs por meio do seu nome de domínio personalizado.

Depois que uma API se torna disponível publicamente, os consumidores podem usá-la. À medida que uma API pública evolui, seu contrato de serviço também evolui para refletir novos recursos e capacidades. No entanto, não é aconselhável alterar ou remover recursos existentes. Qualquer alteração significativa pode afetar as aplicações do consumidor e interrompê-las no runtime. O versionamento de APIs é importante para evitar a quebra da compatibilidade com versões anteriores e a quebra de um contrato.

Você precisa de uma estratégia clara de versionamento de APIs para ajudar os consumidores a adotá-las. O controle de versão APIs usando o método baseado em caminhos URLs é a abordagem mais simples e comumente usada. Nesse tipo de controle de versão, as versões são definidas explicitamente como parte da API. URIs O exemplo a seguir URLs mostra como um consumidor pode usar o URI para especificar uma versão da API para sua solicitação:

`https://api.example.com/api/v1/orders `

`https://api.example.com/api/v2/orders `

`https://api.example.com/api/vX/orders`

Esse padrão usa o AWS Cloud Development Kit (AWS CDK) para criar, implantar e testar um exemplo de implementação de uma solução escalável de versionamento baseada em caminhos para sua API. AWS CDK é uma estrutura de desenvolvimento de software de código aberto para modelar e provisionar seus recursos de aplicativos em nuvem usando linguagens de programação conhecidas.

## Pré-requisitos e limitações
<a name="implement-path-based-api-versioning-by-using-custom-domains-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ A propriedade de um domínio é necessária para usar o repositório de exemplos deste padrão e usar a funcionalidade de domínios personalizados do Amazon API Gateway. Você pode usar o Amazon Route 53 para criar e gerenciar domínios para sua organização. Para obter informações sobre como registrar ou transferir um domínio com o Route 53, consulte [Registering new domains](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register-update.html) na documentação do Route 53.
+ Antes de configurar um nome de domínio personalizado para uma API, você deve ter um [certificado SSL/TLS](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-specify-certificate-for-custom-domain-name.html) pronto no AWS Certificate Manager.
+ É necessário criar ou atualizar o registro de recursos do provedor DNS para ser mapeado ao endpoint da API. Sem esse mapeamento, as solicitações de API que forem direcionadas para o nome de domínio personalizado não conseguirão acessar o API Gateway.

**Limitações**
+ Um nome de domínio personalizado deve ser exclusivo Região da AWS em todos Contas da AWS.
+ Para configurar mapeamentos de API com vários níveis, é necessário usar um nome de domínio regional personalizado e a política de segurança do TLS 1.2.
+ Em um mapeamento de API, o nome de domínio personalizado e o mapeado APIs devem estar no mesmo Conta da AWS.
+ Os mapeamentos da API devem conter somente letras, números e os seguintes caracteres: `$-_.+!*'()/`
+ O comprimento máximo para o caminho em um mapeamento de API é de 300 caracteres.
+ É possível ter 200 mapeamentos de API com vários níveis para cada nome de domínio.
+ Você só pode APIs mapear HTTP para um nome de domínio personalizado regional com a política de segurança TLS 1.2.
+ Você não pode WebSocket APIs mapear para o mesmo nome de domínio personalizado de uma API HTTP ou API REST.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ Esse exemplo de implementação é usado [AWS CDK na TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) versão 2.149.0.

## Arquitetura
<a name="implement-path-based-api-versioning-by-using-custom-domains-architecture"></a>

O diagrama a seguir mostra o seguinte fluxo de trabalho da arquitetura.

![\[Fluxo de trabalho usando mapeamentos de API e domínios personalizados para implementar uma solução de versionamento de APIs baseado em caminhos.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e1b32d2b-410f-4ace-967e-f0b8aaf0304c/images/fa9f04f1-efa6-4fb1-a541-ae3da4076b00.png)


O diagrama ilustra o seguinte:

1. O usuário da API envia uma solicitação para o Amazon API Gateway com um nome de domínio personalizado.

1. O API Gateway roteia dinamicamente a solicitação do usuário para uma instância e um estágio apropriados do API Gateway, com base no caminho indicado no URL da solicitação. A tabela a seguir mostra um exemplo de como os diferentes caminhos baseados em URL podem ser roteados para estágios específicos de diferentes instâncias do API Gateway.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/implement-path-based-api-versioning-by-using-custom-domains.html)

1. A instância de destino do API Gateway processa a solicitação e retorna o resultado ao usuário.

**Automação e escala**

Recomendamos que você use AWS CloudFormation pilhas separadas para cada versão da sua API. Com essa abordagem, você pode ter um isolamento completo entre o back-end, APIs que pode ser roteado pelo recurso de mapeamento personalizado da API de domínio. Uma vantagem dessa abordagem é que diferentes versões da sua API podem ser implantadas ou removidas de forma independente, sem o risco de modificar outra API. Essa abordagem aumenta a resiliência por meio do isolamento das CloudFormation pilhas. Além disso, ele fornece diferentes opções de back-end para sua API AWS Lambda AWS Fargate, como endpoints HTTP e ações de. Serviços da AWS

Você pode usar estratégias de ramificação do Git, como o [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/gitflow-branching-strategy.html), em combinação com CloudFormation pilhas isoladas para gerenciar o código-fonte implantado em diferentes versões da API. Ao usar essa opção, você pode manter versões diferentes da sua API sem a necessidade de duplicar o código-fonte para novas versões. Com o Gitflow, você pode adicionar marcações às confirmações no seu repositório git à medida que os lançamentos são realizados. Como resultado, você tem uma visão geral completa do código-fonte relacionado a uma versão específica. Como as atualizações precisam ser realizadas, você pode verificar o código de uma versão específica, fazer atualizações e, em seguida, implantar o código-fonte atualizado na CloudFormation pilha que se alinha à versão principal correspondente. Essa abordagem reduz o risco de quebrar outra versão da API porque cada versão da API tem código-fonte isolado e é implantada em CloudFormation pilhas separadas.

## Ferramentas
<a name="implement-path-based-api-versioning-by-using-custom-domains-tools"></a>

**Serviços da AWS**
+ [O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) ajuda você a criar, armazenar e renovar certificados e chaves SSL/TLS X.509 públicos e privados que protegem seus AWS sites e aplicativos.
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)é uma estrutura de desenvolvimento de software de código aberto para definir sua infraestrutura de nuvem em código e provisioná-la por meio dela. CloudFormation A implementação de amostra desse padrão usa o [AWS CDK in TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html). Trabalhar com o AWS CDK in TypeScript usa ferramentas familiares, incluindo o TypeScript compilador Microsoft (`tsc`), o [Node.js](https://nodejs.org/) e o gerenciador de pacotes node (`npm`). Se preferir, você pode usar o [Yarn](https://yarnpkg.com/), embora os exemplos deste padrão usem `npm`. Os módulos que compõem a [Biblioteca de Constructos da AWS](https://docs.aws.amazon.com/cdk/v2/guide/libraries.html#libraries-construct) são distribuídos por meio do repositório `npm `, [npmjs.org](https://docs.npmjs.com/).
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões 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.
+ O [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) é um serviço web de DNS altamente disponível e escalável.
+ O [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html) é um firewall para aplicações web que ajuda a monitorar solicitações HTTP e HTTPS encaminhadas aos recursos da sua aplicação web protegida.

**Outras ferramentas**
+ [Bruno](https://www.usebruno.com/) é um cliente de teste de API de código aberto e compatível com git.
+ O [cdk-nag](https://github.com/cdklabs/cdk-nag) é um utilitário de código aberto que verifica as melhores práticas AWS CDK dos aplicativos usando pacotes de regras.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [path-based-versioning-with-api-gateway](https://github.com/aws-samples/path-based-versioning-with-api-gateway).

## Práticas recomendadas
<a name="implement-path-based-api-versioning-by-using-custom-domains-best-practices"></a>
+ Use um pipeline robusto de integração contínua e entrega contínua (CI/CD) para automatizar o teste e a implantação de suas CloudFormation pilhas criadas com o. AWS CDK Para obter mais informações relacionadas a essa recomendação, consulte o [AWS DevOps Well-Architected Guidance](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html).
+ AWS WAF é um firewall gerenciado que se integra facilmente a serviços como o Amazon API Gateway. Embora AWS WAF não seja um componente necessário para que esse padrão de controle de versão funcione, recomendamos como prática recomendada de segurança incluí-lo no API AWS WAF Gateway.
+ Incentive os consumidores de API a atualizarem regularmente para a versão mais recente da sua API, para que as versões mais antigas da API possam ser descontinuadas e removidas de forma eficiente.
+ Antes de usar essa abordagem em um ambiente de produção, implemente uma estratégia de firewall e autorização para sua API.
+ Implemente o acesso ao gerenciamento de seus AWS recursos Conta da AWS usando o modelo de acesso com [privilégios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Para aplicar as melhores práticas e recomendações de segurança para aplicativos criados com o AWS CDK, recomendamos que você use o utilitário [cdk-nag](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html). 

## Épicos
<a name="implement-path-based-api-versioning-by-using-custom-domains-epics"></a>

### Preparar seu ambiente local
<a name="prepare-your-local-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o repositório de aplicação de exemplo, execute o seguinte comando:<pre>git clone https://github.com/aws-samples/path-based-versioning-with-api-gateway</pre> | Desenvolvedor de aplicativos | 
| Acesse o repositório clonado. | Para navegar até a pasta do repositório clonado, execute o seguinte comando: <pre>cd api-gateway-custom-domain-versioning</pre> | Desenvolvedor de aplicativos | 
| Instale as dependências necessárias. | Para instalar as dependências necessárias, execute os seguintes comandos:<pre>npm install </pre> | Desenvolvedor de aplicativos | 

### Implante a pilha de CloudFormation roteamento
<a name="deploy-the-cfnshort-routing-stack"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicie a implantação da pilha de roteamento. | Para iniciar a implantação da pilha de CloudFormation roteamento`CustomDomainRouterStack`, execute o comando a seguir, `example.com` substituindo-o pelo nome do domínio que você possui:<pre>npx cdk deploy CustomDomainRouterStack --parameters PrerequisiteDomainName=example.com</pre>A implantação da pilha não será bem-sucedida até que a seguinte tarefa de validação de DNS do domínio seja executada com êxito. | Desenvolvedor de aplicativos | 

### Confirmar a propriedade de um domínio
<a name="verify-domain-ownership"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique a propriedade do seu domínio. | O certificado permanecerá com o status **Validação pendente** até que você comprove a propriedade do domínio associado. Para comprovar a propriedade, adicione registros CNAME à zona hospedada associada ao domínio. Para obter mais informações, consulte [Validação de DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) na AWS Certificate Manager documentação. Adicionar os registros apropriados permite que a implantação do `CustomDomainRouterStack` seja bem-sucedida. | Desenvolvedor de aplicações, administrador de sistemas da AWS, administrador de rede | 
| Crie um registro de aliases para apontar ao seu domínio personalizado do API Gateway. | Depois que o certificado for emitido e validado com sucesso, [crie um registro de DNS](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-create.html#apigateway-regional-api-custom-domain-dns-record) que aponte para seu URL de domínio personalizado do Amazon API Gateway. O URL do domínio personalizado é gerado exclusivamente pelo provisionamento do domínio personalizado e é especificado como um parâmetro de saída. CloudFormation Confira abaixo um [registro de exemplo](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-basic.html): **Política de roteamento**: roteamento simples**Nome do registro**: `demo.api-gateway-custom-domain-versioning.example.com`**Alias**: Yes**Tipo de registro**: um registro DNS do tipo “A” que aponta para um recurso AWS **Valor**: `d-xxxxxxxxxx.execute-api.xx-xxxx-x.amazonaws.com`**TTL (segundos)**: 300 | Desenvolvedor de aplicações, administrador de sistemas da AWS, administrador de rede | 

### Implante CloudFormation pilhas e invoque a API
<a name="deploy-cfnshort-stacks-and-invoke-the-api"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante a pilha `ApiStackV1`. | Para implantar a pilha `ApiStackV1`, execute o seguinte comando:<pre>npm run deploy-v1</pre>O seguinte código do CDK adiciona o mapeamento de APIs:<pre>var apiMapping = new CfnApiMapping(this, "ApiMapping", {<br />      apiId: this.lambdaRestApi.restApiId,<br />      domainName: props.customDomainName.domainName,<br />      stage: "api",<br />      apiMappingKey: "api/v1",<br />    });</pre> | Desenvolvedor de aplicativos | 
| Implante a pilha `ApiStackV2`. | Para implantar a pilha `ApiStackV2`, execute o seguinte comando:<pre>npm run deploy-v2</pre> | Desenvolvedor de aplicativos | 
| Invoque a API . | Para invocar a API e testar os endpoints da API usando o Bruno, consulte as instruções em [Informações adicionais](#implement-path-based-api-versioning-by-using-custom-domains-additional). | Desenvolvedor de aplicativos | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpar os recursos | Para destruir os recursos associados a essa aplicação de exemplo, use o seguinte comando:<pre>npx cdk destroy --all</pre>Certifique-se de limpar todos os registros de DNS do Route 53 que foram adicionados manualmente para o processo de verificação da propriedade do domínio. | Desenvolvedor de aplicativos | 

## Solução de problemas
<a name="implement-path-based-api-versioning-by-using-custom-domains-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| A implantação de `CustomDomainRouterStack` expira porque não foi possível validar o certificado. | Certifique-se de ter adicionado os registros CNAME de validação de DNS adequados, conforme descrito na tarefa anterior. Seu novo certificado pode continuar a exibir um status de **Validação pendente** por até 30 minutos após adicionar os registros de validação de DNS. Para obter mais informações, consulte [Validação de DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) na AWS Certificate Manager documentação. | 

## Recursos relacionados
<a name="implement-path-based-api-versioning-by-using-custom-domains-resources"></a>
+ [Implementando o controle de versão do API Gateway baseado em cabeçalho com a CloudFront Amazon](https://aws.amazon.com/blogs/compute/implementing-header-based-api-gateway-versioning-with-amazon-cloudfront/) — AWS Esta postagem no blog sobre computação oferece uma estratégia de controle de versão baseada em cabeçalho como alternativa à estratégia de controle de versão baseada em caminhos descrita nesse padrão.
+ [AWS CDK Workshop](https://cdkworkshop.com/20-typescript.html) — Este workshop introdutório se concentra na criação e implantação de aplicativos AWS usando o. AWS Cloud Development Kit (AWS CDK) Este workshop é compatível com Go, Python e. TypeScript 

## Mais informações
<a name="implement-path-based-api-versioning-by-using-custom-domains-additional"></a>

**Testar sua API com o Bruno**

Recomendamos que você use o [Bruno](https://www.usebruno.com/), uma ferramenta de teste de API de código aberto, para verificar se o roteamento baseado em caminho está funcionando corretamente para a aplicação de exemplo. Este padrão fornece uma coleção de exemplos para facilitar o teste da sua API de exemplo.

Para invocar e testar sua API, siga as etapas abaixo:

1. [Instale o Bruno.](https://www.usebruno.com/downloads)

1. Abra o Bruno.

1. No [repositório de código](https://github.com/aws-samples/path-based-versioning-with-api-gateway) desse padrão, selecione **Bruno/sample-API** - e abra a coleção. Gateway-Custom-Domain-Versioning 

1. Para ver o menu suspenso **Ambientes** no canto superior direito da interface do usuário (UI), selecione qualquer solicitação na coleção.

1. No menu suspenso **Ambientes**, selecione **Configurar**.

1. Substitua o valor `REPLACE_ME_WITH_YOUR_DOMAIN` pelo seu domínio personalizado.

1. Escolha **Salvar** e feche a seção **Configuração**.

1. Em **Ambiente de sandbox**,** **verifique se a opção **Ativo** está selecionada.

1. Invoque sua API usando o botão **->** para a solicitação selecionada.

1. Anote como a validação (transmissão de valores não numéricos) é tratada na V1 em comparação com a V2.

Para ver capturas de tela de exemplos de invocação de API e comparação da validação de V1 e V2, consulte **Testing your sample API** no arquivo `README.md` no [repositório de código](https://github.com/aws-samples/path-based-versioning-with-api-gateway) deste padrão.

# Importe a biblioteca psycopg2 para interagir com seu banco AWS Lambda de dados PostgreSQL
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Resumo
<a name="import-psycopg2-library-lambda-summary"></a>

O [Psycopg](https://www.psycopg.org/docs/) é um adaptador de banco de dados do PostgreSQL para Python. Os desenvolvedores empregram a biblioteca `psycopg2` para gravar aplicações em Python que interagem com bancos de dados do PostgreSQL.

Na Amazon Web Services (AWS), os desenvolvedores também usam o [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) para executar código em aplicações ou em serviços de backend. O Lambda é um serviço de computação orientado a eventos e com tecnologia sem servidor que executa código sem a necessidade de provisionar ou gerenciar servidores.

Por padrão, quando você cria uma nova função que utiliza um [runtime do Python com suporte por parte do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), o ambiente de runtime do Lambda é criado com base em uma [imagem de base destinada ao Lambda](https://github.com/aws/aws-lambda-base-images), que é fornecida pela AWS. Bibliotecas, como `pandas` ou `psycopg2`, não estão incluídas na imagem de base. Para usar uma biblioteca, é necessário empacotá-la em um pacote personalizado e anexá-la ao Lambda.

Existem várias formas de empacotar e anexar uma biblioteca, incluindo:
+ Implantar sua função do Lambda a partir de um [arquivo .zip](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html).
+ Implantar sua função do Lambda a partir de uma imagem de contêiner personalizada.
+ Criar uma [camada para o Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) e anexá-la à sua função do Lambda.

Esse padrão demonstra as duas primeiras opções.

Com um pacote de implantação em .zip, adicionar a biblioteca `pandas` à sua função do Lambda é relativamente simples. Crie uma pasta em sua máquina do Linux, adicione o script do Lambda juntamente com a biblioteca `pandas` e as respectivas dependências à pasta, realize a compactação da pasta em um arquivo .zip e forneça-o como origem para a função do Lambda.

Embora usar um pacote de implantação em .zip seja uma prática comum, essa abordagem não funciona para a biblioteca `psycopg2`. Primeiro, este padrão apresenta o erro que ocorre se você tentar adicionar a biblioteca `psycopg2` à sua função do Lambda usando um pacote de implantação em .zip. Em seguida, o padrão demonstra como implantar o Lambda usando um Dockerfile e editar a imagem do Lambda para que a biblioteca `psycopg2` funcione corretamente.

Para obter informações sobre os três recursos que o padrão implanta, consulte a seção [Informações adicionais](#import-psycopg2-library-lambda-additional).

## Pré-requisitos e limitações
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS com permissões suficientes para implantar os AWS recursos usados por esse padrão
+ AWS Cloud Development Kit (AWS CDK) instalado globalmente executando `npm install -g aws-cdk`
+ Um cliente do Git
+ Python
+ Docker

**Limitações**
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte a página [Cotas e endpoints de serviços](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ Versão do runtime do Python [compatível com o Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Versão 2.9.3 do Psycopg2
+ Versão 1.5.2 do Pandas

## Arquitetura
<a name="import-psycopg2-library-lambda-architecture"></a>

**Visão geral da solução**

Para ilustrar os desafios que você pode enfrentar ao usar a biblioteca `psycopg2` no Lambda, o padrão implanta duas funções do Lambda:
+ Uma função do Lambda com runtime do Python criada com base em um arquivo .zip. As bibliotecas `psycopg2` e `pandas` são instaladas nesse pacote de implantação .zip usando [pip](https://pypi.org/project/pip/).
+ Uma função do Lambda com runtime do Python criada com base em um Dockerfile. O Dockerfile instala as bibliotecas `psycopg2` e `pandas` na imagem de contêiner do Lambda.

A primeira função do Lambda instala a biblioteca `pandas` e as respectivas dependências em um arquivo .zip, e o Lambda pode usar essa biblioteca.

A segunda função do Lambda demonstra que, ao criar uma imagem de contêiner para a função do Lambda, você pode executar as bibliotecas `pandas` e `psycopg2` no Lambda.

## Ferramentas
<a name="import-psycopg2-library-lambda-tools"></a>

**Serviços da AWS**
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda a definir e a provisionar a infraestrutura da Nuvem AWS por meio de código.
+ 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**
+ O [Docker](https://www.docker.com/) é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.
+ O [pandas](https://pandas.pydata.org/) é uma ferramenta de código aberto baseada em Python para análise e manipulação de dados.
+ O [Psycopg](https://www.psycopg.org/docs/) é um adaptador de banco de dados do PostgreSQL para a linguagem Python, projetado para aplicações que usam várias threads. Este padrão usa o Psycopg 2.
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.

**Repositório de código**

O código desse padrão está disponível no repositório [import-psycopg2](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - - em. in-lambda-to-interact with-postgres-database GitHub

## Práticas recomendadas
<a name="import-psycopg2-library-lambda-best-practices"></a>

Esse padrão fornece um exemplo prático de uso AWS CDK para criar uma função Lambda a partir de um Dockerfile. Se você reutilizar esse código em sua aplicação, certifique-se de que os recursos implantados atendam a todos os requisitos de segurança. Empregue ferramentas como o [Checkov](https://www.checkov.io/), que verifica as configurações da infraestrutura de nuvem para identificar falhas de configuração antes da implantação.

## Épicos
<a name="import-psycopg2-library-lambda-epics"></a>

### Clonagem do repositório e configuração da implantação
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o GitHub repositório em sua máquina local, execute os seguintes comandos:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | AWS geral | 
| Configure sua implantação. | Edite o `app.py` arquivo com informações sobre Conta da AWS:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | AWS geral | 

### Inicialização da conta da AWS e implantação da aplicação
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize seu. Conta da AWS | Se você ainda não [inicializou seu ambiente AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), execute os seguintes comandos com as AWS credenciais da sua conta: AWS <pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS geral | 
| Implante o código. | Para implantar o AWS CDK aplicativo, execute o seguinte comando:<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS geral | 

### Teste das funções do Lambda usando o Console de Gerenciamento da AWS
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Teste a função do Lambda criada usando o arquivo .zip. | Para testar a função do Lambda criada usando o arquivo .zip, execute as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Como o Lambda não encontra as bibliotecas do PostgreSQL necessárias na imagem padrão, ele não consegue usar a biblioteca `psycopg2`. | AWS geral | 
| Teste a função do Lambda criada usando o Dockerfile. | Para usar a biblioteca `psycopg2` em sua função do Lambda, é necessário editar a imagem de máquina da Amazon (AMI) do Lambda.Para testar a função do Lambda criada usando o Dockerfile, execute as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)O código a seguir mostra o Dockerfile que o AWS CDK modelo cria:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>O Dockerfile usa a imagem AWS Lambda fornecida para o tempo de execução do Python e instala o [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), que contém as bibliotecas necessárias para compilar aplicativos que interagem diretamente com o servidor de gerenciamento do PostgreSQL. O Dockerfile também instala as bibliotecas `pandas` e `psycopg2`, conforme indicado no arquivo `requirements.txt`. | AWS geral | 

## Recursos relacionados
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK documentação](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda documentação](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Mais informações
<a name="import-psycopg2-library-lambda-additional"></a>

Nesse padrão, o AWS CDK modelo fornece uma AWS pilha com três recursos:
+ Um [perfil do AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) para as funções do Lambda.
+ Uma função do Lambda com um runtime do Python. A função é implantada usando o pacote de implantação `Constructs/lambda/lambda_deploy.zip`.
+ Uma função do Lambda com um runtime do Python. A função é implantada usando o Dockerfile presente na pasta `Constructs`.

O script de ambas as funções do Lambda verifica se as bibliotecas `pandas` e `psycopg2` foram importadas com êxito:

```
import pandas
print("pandas successfully imported")

import psycopg2
print("psycopg2 successfully imported")

def handler(event, context):
    """Function that checks whether psycopg2  and pandas are successfully imported or not"""
    return {"Status": "psycopg2 and pandas successfully imported"}
```

O pacote de implantação `lambda_deploy.zip` é desenvolvido com o script bash `Constructs/lambda/build.sh`. Esse script cria uma pasta, copia o script do Lambda, instala as bibliotecas `pandas` e `psycopg2`, e gera o arquivo .zip. Para gerar você mesmo o arquivo.zip, execute esse script bash e reimplante a pilha. AWS CDK 

O Dockerfile começa com a imagem base AWS fornecida para o Lambda com um tempo de execução do Python. O Dockerfile instala as bibliotecas `pandas` e `psycopg2` na imagem padrão.

# Integre o Amazon API Gateway com o Amazon SQS para lidar com REST assíncrono APIs
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis"></a>

*Natalia Colantonio Favero e Gustavo Martim, Amazon Web Services*

## Resumo
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-summary"></a>

Quando você implanta o REST APIs, às vezes você precisa expor uma fila de mensagens que os aplicativos cliente possam publicar. Por exemplo, você pode ter problemas com a latência de terceiros APIs e atrasos nas respostas, ou talvez queira evitar o tempo de resposta das consultas ao banco de dados ou evitar escalar o servidor quando há um grande número de consultas simultâneas. APIs Nesses cenários, as aplicações clientes que publicam dados para a fila só precisam ter ciência de que a API os recebeu, sem precisar saber o que ocorre após o recebimento.

Esse padrão cria um endpoint da API REST usando o [Amazon API Gateway](https://aws.amazon.com/api-gateway/) para enviar uma mensagem ao [Amazon Simple Queue Service (Amazon SQS)](https://aws.amazon.com/sqs/). Ele cria uma easy-to-implement integração entre os dois serviços que evita o acesso direto à fila do SQS.

## Pré-requisitos e limitações
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-prereqs"></a>
+ Uma [AWS conta ativa](https://portal.aws.amazon.com/billing/signup/iam)

## Arquitetura
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-architecture"></a>

![\[Arquitetura para integração do API Gateway com o Amazon SQS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/70984dee-e49f-4446-9d52-49ce826c3909/images/737ba0b2-da8f-4478-8c54-0a4835fd69f9.png)


O diagrama ilustra estas etapas:

1. Uma solicitação é enviada a um endpoint da API REST via POST usando uma ferramenta como Postman, outra API ou outras tecnologias.

1. O API Gateway publica uma mensagem na fila, que é recebida no corpo da solicitação.

1. O Amazon SQS recebe a mensagem e envia uma resposta ao API Gateway com um código de êxito ou de falha.

## Ferramentas
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-tools"></a>
+ [O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) fornece uma fila hospedada segura, durável e disponível que ajuda a integrar e desacoplar sistemas e componentes de software distribuídos.   

## Épicos
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-epics"></a>

### Criação de uma fila do SQS
<a name="create-an-sqs-queue"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie sua fila. | Para criar uma fila do SQS que receba as mensagens provenientes da API REST:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicativos | 

### Fornecimento de acesso ao Amazon SQS
<a name="provide-access-to-sqs"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um perfil do IAM. | Este perfil do IAM concede aos recursos do API Gateway acesso total ao Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicações e administrador da AWS | 

### Criar uma API REST
<a name="create-a-rest-api"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma API REST. | Esta é a API REST à qual as solicitações HTTP são enviadas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicativos | 
| Estabeleça a conexão entre o API Gateway e o Amazon SQS. | Essa etapa habilita o fluxo da mensagem do conteúdo do corpo da solicitação HTTP para o Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicativos | 

### Teste da API REST
<a name="test-the-rest-api"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Teste a API REST. | Faça um teste para identificar configurações que estejam ausentes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicativos | 
| Altere a integração da API para encaminhar a solicitação corretamente para o Amazon SQS. | Conclua a configuração para corrigir o erro de integração:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicativos | 
| Realize o teste e a validação da mensagem no Amazon SQS. | Execute um teste para confirmar que a execução do teste obteve êxito:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicativos | 
| Teste o API Gateway usando um caractere especial. | Execute um teste que inclua caracteres especiais (como &) que não são aceitos em uma mensagem:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Isso ocorre porque, por padrão, caracteres especiais não são suportados no corpo da mensagem. Na próxima etapa, você configurará o API Gateway para fornecer suporte a caracteres especiais. Para obter mais informações sobre conversões de tipo de conteúdo, consulte a [documentação do API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html). | Desenvolvedor de aplicativos | 
| Altere a configuração da API para fornecer suporte a caracteres especiais. | Ajuste a configuração para aceitar caracteres especiais na mensagem:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)A nova mensagem deverá incluir o caractere especial. | Desenvolvedor de aplicativos | 

### Implantação de uma API REST
<a name="deploy-the-rest-api"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implantar a API. |  Para implantar a API REST:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicativos | 
| Realize o teste usando uma ferramenta externa. | Execute um teste com uma ferramenta externa para confirmar que a mensagem foi recebida com êxito:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Desenvolvedor de aplicativos | 

### Limpar
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua a API. | No [console do API Gateway](https://console.aws.amazon.com/apigateway/), selecione a API que você criou e, em seguida, escolha **Excluir**. | Desenvolvedor de aplicativos | 
| Exclua o perfil do IAM. | **No [console do IAM](https://console.aws.amazon.com/iam/), no painel **Roles**, selecione **AWSGatewayRoleForSQS** e, em seguida, escolha Delete.** | Desenvolvedor de aplicativos | 
| Exclua a fila do SQS. | No [console do Amazon SQS](https://console.aws.amazon.com/sqs/), no painel **Filas**, selecione a fila do SQS que você criou e, em seguida, escolha **Excluir**. | Desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-resources"></a>
+ [SQS- SendMessage](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html#SQS-SendMessage) (documentação do API Gateway)
+ [Conversões de tipo de conteúdo no API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html) (documentação do API Gateway)
+ [Variáveis de utilidade](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#util-template-reference) (documentação do API Gateway)
+ [Como faço para integrar uma API REST do API Gateway com o Amazon SQS e resolver erros comuns?](https://repost.aws/knowledge-center/api-gateway-rest-api-sqs-errors) (AWS Re:postar artigo)

# 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 

![\[Nuvem AWS architecture showing user interaction with jobs API, Lambda functions, and 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/)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)

# Processe eventos de forma assíncrona com o Amazon API Gateway e o Amazon DynamoDB Streams
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams"></a>

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

## Resumo
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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, o Amazon DynamoDB Streams e. AWS Lambda A arquitetura suporta a execução de trabalhos de processamento paralelo com os mesmos parâmetros de entrada e usa uma API REST básica como interface. Neste exemplo, usar o Lambda como back-end limita a duração dos trabalhos a 15 minutos. Você pode evitar esse limite usando um serviço alternativo para processar eventos recebidos (por exemplo, AWS Fargate).

[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](#processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools).

## Pré-requisitos e limitações
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versão 2.85.0 ou posterior
  + [Docker](https://docs.docker.com/get-docker/) versão 20.10.21 ou posterior
  + [Node.js](https://nodejs.org/en/download/), versão 18 ou versões posteriores
  + [Projen](https://pypi.org/project/projen/) versão 0.71.111 ou posterior
  + [Python](https://www.python.org/downloads/) versão 3.9.16 ou posterior

**Limitações**
+ O número máximo recomendado de leitores para o DynamoDB Streams é dois para evitar 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 das funções do Lambda.

## Arquitetura
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-architecture"></a>

**Arquitetura**

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

![\[Diagrama da arquitetura e do processo, com as etapas listadas após o diagrama.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/68a46501-16e5-48e4-99c6-fc67a8b4133a/images/29fe6982-ad81-4099-9c65-08b17c96e78f.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 trabalhos retorna para você uma resposta HTTP que contém o identificador do trabalho.

1. A API de trabalhos coloca os parâmetros do trabalho na tabela do `jobs_table` Amazon DynamoDB.

1. A tabela do `jobs_table` DynamoDB Stream do DynamoDB invoca as funções Lambda de processamento de eventos.

1. As funções Lambda de processamento de eventos processam o evento e, em seguida, colocam os resultados do trabalho na tabela do DynamoDB. `jobs_table` Para ajudar a garantir resultados consistentes, as funções de processamento de eventos implementam um mecanismo de bloqueio [otimista](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html).

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_table` 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, o mapeamento de origem da função de processamento de eventos envia o evento para o tópico de tratamento de erros do Amazon Simple Notification Service (Amazon SNS).

1. O tópico SNS de tratamento de erros envia o evento de forma assíncrona 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_table`.

   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 da Amazon EventBridge .

   Você pode reproduzir os eventos arquivados usando. EventBridge

## Ferramentas
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools"></a>

**Serviços da AWS**
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda a definir e a provisionar a infraestrutura da Nuvem AWS por meio de código.
+ 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 do Lambda, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outras 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.
+ O [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.

**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 repositório GitHub [Asynchronous Processing with API Gateway e DynamoDB Streams.](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk)

## Práticas recomendadas
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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 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 AWS WAF para proteger sua API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Para evitar a limitação, a documentação do [DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Processing) desencoraja os usuários de lerem com mais de dois consumidores o fragmento do mesmo stream. Para ampliar o número de consumidores, recomendamos o uso do [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html).
+ O [bloqueio otimista](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html) foi usado neste exemplo para garantir atualizações consistentes dos itens na tabela do DynamoDB`jobs_table`. Dependendo do requisito do caso de uso, talvez seja necessário implementar mecanismos de travamento mais confiáveis, como travamento pessimista.

## Épicos
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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-dynamodb-streams-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-dynamodb-streams-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/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.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](https://aws.amazon.com/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/)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 do 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 `deploy` comando:<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/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | AWS DevOps | 
| Teste a arquitetura de exemplo. | Para testar a arquitetura de exemplo, envie solicitações 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="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | 

## Recursos relacionados
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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)
+ [Alterar a captura de dados para o DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Bloqueio otimista com número de versão](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)
+ [Usando o Kinesis Data Streams para capturar alterações no DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html)

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

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

## Resumo
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-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, o Amazon Simple Queue Service (Amazon SQS) e. AWS Fargate A arquitetura suporta a execução de trabalhos de processamento sem restrições de duração 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)](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)[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-amazon-sqs-and-aws-fargate-tools).

## Pré-requisitos e limitações
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-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](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versão 2.85.0 ou posterior
  + [Docker](https://docs.docker.com/get-docker/) versão 20.10.21 ou posterior
  + [Node.js](https://nodejs.org/en/download/), versão 18 ou versões posteriores
  + [Projen](https://pypi.org/project/projen/) versão 0.71.111 ou posterior
  + [Python](https://www.python.org/downloads/) versão 3.9.16 ou posterior

**Limitações**
+ Os trabalhos simultâneos são limitados a 500 tarefas por minuto, que é o número máximo de tarefas que o Fargate pode provisionar.

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

O diagrama a seguir mostra a interação da API de trabalhos com a tabela do `jobs` Amazon DynamoDB, o serviço Fargate de processamento de eventos e a função de tratamento de erros. AWS Lambda Os eventos são armazenados em um arquivo de EventBridge eventos da Amazon.

![\[Diagrama de arquitetura com descrição após o diagrama.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/8a03149c-8f34-4593-84d5-accc1800a0a2/images/5e1071aa-4fbc-495c-bc22-8e62a32a136b.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 envia uma mensagem para a fila do SQS.

1. Fargate extrai a mensagem da fila do SQS, processa o evento e, em seguida, coloca os resultados do trabalho na tabela do DynamoDB. `jobs`

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 fila SQS enviará o evento para a fila de cartas mortas (DLQ).

1. Um EventBridge evento inicia 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 EventBridge arquivo.

   Você pode reproduzir os eventos arquivados usando. EventBridge

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

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código.
+ 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.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)ajuda você a executar contêineres sem precisar gerenciar servidores ou instâncias do Amazon Elastic Compute Cloud EC2 (Amazon). É usado em conjunto com o Amazon Elastic Container Service (Amazon ECS).
+  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.
+ O [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) fornece uma fila hospedada segura, durável e disponível que ajuda a integrar e desacoplar sistemas e componentes de software distribuídos.

**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 repositório GitHub [Asynchronous Processing with API Gateway e SQS](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk).

## Práticas recomendadas
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-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 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 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-amazon-sqs-and-aws-fargate-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-sqs-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-sqs-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-amazon-sqs-and-aws-fargate.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](https://aws.amazon.com/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/)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 `deploy` comando:<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-amazon-sqs-and-aws-fargate.html) | AWS DevOps | 
| Teste a arquitetura de exemplo. | Para testar a arquitetura de exemplo, envie solicitações 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-amazon-sqs-and-aws-fargate-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-amazon-sqs-and-aws-fargate.html) | 
| A destruição e a reimplantação subsequente da arquitetura de exemplo falham porque o [grupo de CloudWatch registros](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) de registros `/aws/ecs/EventProcessingServiceLogs` 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-amazon-sqs-and-aws-fargate.html) | 

## Recursos relacionados
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-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)
+ [Como faço para integrar uma API REST do API Gateway com o Amazon SQS e resolver erros comuns?](https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-rest-api-sqs-errors/)

# Execute tarefas do AWS Systems Manager Automation de forma síncrona a partir do AWS Step Functions
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Elie El khoury, Amazon Web Services*

## Resumo
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-summary"></a>

Esse padrão explica como se integrar AWS Step Functions com AWS Systems Manager o. Ele usa integrações de serviços do AWS SDK para chamar a **startAutomationExecution**API Systems Manager com um token de tarefa de um fluxo de trabalho de uma máquina de estado e faz uma pausa até que o token retorne com uma chamada bem-sucedida ou com falha. Para demonstrar a integração, esse padrão implementa um invólucro de documento de automação (runbook) ao redor do `AWS-RunPowerShellScript` documento `AWS-RunShellScript` ou e é usado `.waitForTaskToken` para chamar ou de forma síncrona. `AWS-RunShellScript` `AWS-RunPowerShellScript` Para obter mais informações sobre as integrações de serviços do AWS SDK no Step Functions, consulte o [AWS Step Functions Developer](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html) Guide.

O Step Functions**** é um serviço de fluxo de trabalho visual de baixo código que você pode usar para criar aplicativos distribuídos, automatizar processos de negócios e de TI e criar pipelines de dados e aprendizado de máquina usando serviços. AWS Os fluxos de trabalho gerenciam falhas, novas tentativas, paralelização, integrações de serviços e observabilidade para que você possa se concentrar em uma lógica de negócios de maior valor.

A automação, uma capacidade do AWS Systems Manager, simplifica tarefas comuns de manutenção, implantação e remediação, Serviços da AWS como Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift e Amazon Simple Storage Service (Amazon S3). Com o Automation, você tem controle granular sobre a simultaneidade de suas automações. Por exemplo, você pode especificar quantos recursos a destinar simultaneamente e quantos erros podem ocorrer antes que uma automação seja interrompida.

Para obter detalhes da implementação, incluindo etapas, parâmetros e exemplos do runbook, consulte a seção [Informações adicionais](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Pré-requisitos e limitações
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Pré-requisitos **
+ Uma AWS conta ativa
+ AWS Identity and Access Management Permissões (IAM) para acessar Step Functions e Systems Manager
+ Uma EC2 instância com o Systems Manager Agent (SSM Agent) [instalado](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html) na instância
+ [Um perfil de instância do IAM para Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) anexado à instância em que você planeja executar o runbook
+ Um papel de Step Functions que tem as seguintes permissões do IAM (que seguem o princípio do privilégio mínimo):

```
{
             "Effect": "Allow",
             "Action": "ssm:StartAutomationExecution",
             "Resource": "*"
 }
```

**Versões do produto**
+ Esquema do documento SSM versão 0.3 ou mais recente 
+ SSM Agent versão 2.3.672.0 ou mais recente

## Arquitetura
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS Step Functions
+ AWS Systems Manager Automation

**Arquitetura de destino**

![\[Arquitetura para executar tarefas de automação do Systems Manager de forma síncrona a partir do Step Functions\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Automação e escala**
+ Esse padrão fornece um AWS CloudFormation modelo que você pode usar para implantar os runbooks em várias instâncias. (Consulte o repositório de [implementação do GitHub Step Functions e do Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken).)

## Ferramentas
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los em todo o ciclo de vida em todas Contas da AWS as regiões.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)é um serviço de orquestração sem servidor que ajuda você a combinar AWS Lambda funções e outras Serviços da AWS para criar aplicativos essenciais para os negócios.
+ O [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) ajuda você a gerenciar suas aplicações e infraestrutura em execução na Nuvem AWS. Ele simplifica o gerenciamento de aplicativos e recursos, reduz o tempo para detectar e resolver problemas operacionais e ajuda você a gerenciar seus AWS recursos com segurança em grande escala.

**Código **

O código desse padrão está disponível no repositório de [implementação do GitHub Step Functions and Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

## Épicos
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-epics"></a>

### Crie runbooks
<a name="create-runbooks"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Faça o download do CloudFormation modelo. | Baixe o `ssm-automation-documents.cfn.json` modelo da `cloudformation ` pasta do GitHub repositório. | AWS DevOps | 
| Crie runbooks. | Faça login no Console de gerenciamento da AWS, abra o [CloudFormation console](https://console.aws.amazon.com/cloudformation/) e implante o modelo. Para obter mais informações sobre a implantação CloudFormation de modelos, consulte [Criação de uma pilha no CloudFormation console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) na CloudFormation documentação. O CloudFormation modelo implanta três recursos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Criar um exemplo de máquina de estado
<a name="create-a-sample-state-machine"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar uma máquina de estado de teste.  | Siga as instruções no [Guia do AWS Step Functions desenvolvedor](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) para criar e executar uma máquina de estado. Para a definição, use o código a seguir. Certifique-se de atualizar o valor `InstanceIds` com o ID de uma instância válida habilitada para o Systems Manager em sua conta.<pre>{<br />  "Comment": "A description of my state machine",<br />  "StartAt": "StartAutomationWaitForCallBack",<br />  "States": {<br />    "StartAutomationWaitForCallBack": {<br />      "Type": "Task",<br />      "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken",<br />      "Parameters": {<br />        "DocumentName": "SfnRunCommandByInstanceIds",<br />        "Parameters": {<br />          "InstanceIds": [<br />            "i-1234567890abcdef0"<br />          ],<br />          "taskToken.$": "States.Array($$.Task.Token)",<br />          "workingDirectory": [<br />            "/home/ssm-user/"<br />          ],<br />          "Commands": [<br />            "echo \"This is a test running automation waitForTaskToken\" >> automation.log",<br />            "sleep 100"<br />          ],<br />          "executionTimeout": [<br />              "10800"<br />          ],<br />          "deliveryTimeout": [<br />              "30"<br />          ],<br />          "shell": [<br />              "Shell"<br />          ]<br />            }<br />      },<br />      "End": true<br />    }<br />  }<br />}</pre>Esse código chama o runbook para executar dois comandos que demonstram a chamada `waitForTaskToken` para Systems Manager Automation.O valor do `shell` parâmetro (`Shell`ou`PowerShell`) determina se o documento de automação é executado `AWS-RunShellScript` ou`AWS-RunPowerShellScript`.A tarefa grava “Este é um waitForTask token de automação de execução de teste” no `/home/ssm-user/automation.log` arquivo e, em seguida, dorme por 100 segundos antes de responder com o token da tarefa e liberar a próxima tarefa no fluxo de trabalho.Se você quiser chamar o runbook `SfnRunCommandByTargets` em vez disso, substitua a seção `Parameters` do código anterior pela seguinte:<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Atualize o perfil do IAM para a máquina de estado. | A etapa anterior cria automaticamente um perfil do IAM dedicado para a máquina de estado. No entanto, ele não concede permissões para chamar o runbook. Atualize o perfil adicionando as seguintes permissões:<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Valide as chamadas síncronas. | Execute a máquina de estado para validar a chamada síncrona entre Step Functions e Systems Manager Automation. Para obter um exemplo de resultado, consulte a seção [Informações adicionais](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Recursos relacionados
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Introdução ao AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Guia AWS Step Functions do desenvolvedor*)
+ [Aguarde um retorno de chamada com o token da tarefa](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*Guia do AWS Step Functions desenvolvedor*, padrões de integração de serviços)
+ Chamadas de API [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) and [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) (documentação do Boto3) 
+ [AWS Systems Manager Automação](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) (*Guia AWS Systems Manager do usuário*)

## Mais informações
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Detalhes da implantação**

Esse padrão fornece um CloudFormation modelo que implanta dois runbooks do Systems Manager:
+ `SfnRunCommandByInstanceIds`executa o `AWS-RunPowerShellScript` comando `AWS-RunShellScript` or usando a instância IDs.
+ `SfnRunCommandByTargets`executa o `AWS-RunPowerShellScript` comando `AWS-RunShellScript` or usando alvos.

Cada runbook implementa quatro etapas para obter uma chamada síncrona ao usar a `.waitForTaskToken` opção em Step Functions.


| 
| 
| Etapa | Ação | Description | 
| --- |--- |--- |
| **1** | `Branch` | Verifica o valor do `shell` parâmetro (`Shell`ou`PowerShell`) para decidir se deve ser executado `AWS-RunShellScript` no Linux ou `AWS-RunPowerShellScript` no Windows. | 
| **2** | `RunCommand_Shell` ou `RunCommand_PowerShell` | Recebe várias entradas e executa o `RunPowerShellScript` comando `RunShellScript` or. Para obter mais informações, verifique a guia **Detalhes** do documento `RunCommand_Shell` ou `RunCommand_PowerShell` Automação no console do Systems Manager. | 
| **3** | `SendTaskFailure` | É executado quando a etapa 2 é abortada ou cancelada. Ele chama a API [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) do Step Functions, que aceita três parâmetros como entrada: o token aprovado pela máquina de estado, o erro de falha e uma descrição da causa da falha. | 
| **4** | `SendTaskSuccess` | É executado quando a etapa 2 é bem-sucedida. Ele chama a API [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) do Step Functions, que aceita o token passado pela máquina de estado como entrada. | 

**Parâmetros do runbook**

`SfnRunCommandByInstanceIds`caderno de execução:


| 
| 
| Nome do parâmetro | Tipo | Opcional ou obrigatório | Description | 
| --- |--- |--- |--- |
| `shell` | String | Obrigatório | O shell de instâncias para decidir se deve ser executado `AWS-RunShellScript` no Linux ou `AWS-RunPowerShellScript` no Windows. | 
| `deliveryTimeout` | Inteiro | Opcional | O tempo, em segundos, de espera pela entrega de um comando ao agente SSM em uma instância. Esse parâmetro tem um valor mínimo de 30 (0,5 minuto) e um valor máximo de 2592000 (720 horas). | 
| `executionTimeout` | String | Opcional | O tempo em segundos para um comando ser concluído antes de ser considerado como tendo falhado. O valor padrão é 3600 (1 hora). O valor máximo é 172800 (48 horas). | 
| `workingDirectory` | String | Opcional | O caminho para o diretório de trabalho em sua instância. | 
| `Commands` | StringList | Obrigatório | O script ou comando do shell a ser executado. | 
| `InstanceIds` | StringList | Obrigatório | A IDs das instâncias em que você deseja executar o comando. | 
| `taskToken` | String | Obrigatório | O token de tarefa a ser usado para respostas de retorno de chamada. | 

`SfnRunCommandByTargets`caderno de execução:


| 
| 
| Nome | Tipo | Opcional ou obrigatório | Description | 
| --- |--- |--- |--- |
| `shell` | String | Obrigatório | O shell de instâncias para decidir se deve ser executado `AWS-RunShellScript` no Linux ou `AWS-RunPowerShellScript` no Windows. | 
| `deliveryTimeout` | Inteiro | Opcional | O tempo, em segundos, de espera pela entrega de um comando ao agente SSM em uma instância. Esse parâmetro tem um valor mínimo de 30 (0,5 minuto) e um valor máximo de 2592000 (720 horas). | 
| `executionTimeout` | Inteiro | Opcional | O tempo em segundos para um comando ser concluído antes de ser considerado como tendo falhado. O valor padrão é 3600 (1 hora). O valor máximo é 172800 (48 horas). | 
| `workingDirectory` | String | Opcional | O caminho para o diretório de trabalho em sua instância. | 
| `Commands` | StringList | Obrigatório | O script ou comando do shell a ser executado. | 
| `Targets` | MapList | Obrigatório | Uma matriz de critérios de pesquisa que identifica instâncias usando os pares de chave-valor que você especificar. Por exemplo: `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | String | Obrigatório | O token de tarefa a ser usado para respostas de retorno de chamada. | 

**Exemplo de saída**

A tabela a seguir fornece um exemplo de saída da Step Function. Ele mostra que o tempo total de execução é superior a 100 segundos entre a etapa 5 (`TaskSubmitted`) e a etapa 6 (`TaskSucceeded`). Isso demonstra que a função step aguardou a conclusão do `sleep 100` comando antes de passar para a próxima tarefa no fluxo de trabalho.


| 
| 
| ID | Tipo | Etapa | Recurso | Tempo decorrido (ms) | Registro de data e hora | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11 de março de 2022 14:50:34.303 | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11 de março de 2022 14:50:34.343 | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11 de março de 2022 14:50:34.343 | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11 de março de 2022 14:50:34.457 | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11 de março de 2022 14:50:34.960 | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 103835 | 11 de março de 2022 14:52:18.138 | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 103860 | 11 de março de 2022 14:52:18.163 | 
| **8** | `ExecutionSucceeded` |  | - | 103897 | 11 de março de 2022 14:52:18.200 | 

# Execute leituras paralelas de objetos do S3 usando Python em uma função AWS Lambda
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function"></a>

*Eduardo Bortoluzzi, Amazon Web Services*

## Resumo
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-summary"></a>

Você pode usar esse padrão para recuperar e resumir uma lista de documentos dos buckets do Amazon Simple Storage Service (Amazon S3) em tempo real. O padrão fornece código de exemplo para objetos de leitura paralela de buckets do S3 na Amazon Web Services ()AWS. O padrão mostra como executar eficientemente tarefas I/O vinculadas com AWS Lambda funções usando Python.

Uma empresa financeira usou esse padrão em uma solução interativa para aprovar ou rejeitar manualmente transações financeiras correlacionadas em tempo real. Os documentos da transação financeira foram armazenados em um bucket S3 relacionado ao mercado. Um operador selecionou uma lista de documentos do bucket do S3, analisou o valor total das transações calculadas pela solução e decidiu aprovar ou rejeitar o lote selecionado.

As tarefas vinculadas à E/S oferecem suporte a vários threads. Neste código de exemplo, o [concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)é usado com no máximo 30 encadeamentos simultâneos, embora as funções do Lambda suportem até 1.024 encadeamentos (com um desses encadeamentos sendo seu processo principal). Esse limite ocorre porque muitos threads criam problemas de latência devido à mudança de contexto e à utilização de recursos de computação. Você também precisa aumentar o máximo de conexões do pool `botocore` para que todos os threads possam realizar o download do objeto S3 simultaneamente.

O código de exemplo usa um objeto de 8,3 KB, com dados JSON, em um bucket do S3. O objeto é lido várias vezes. Depois que a função Lambda lê o objeto, os dados JSON são decodificados em um objeto Python. Em dezembro de 2024, o resultado após a execução deste exemplo foi de 1.000 leituras processadas em 2,3 segundos e 10.000 leituras processadas em 27 segundos usando uma função Lambda configurada com 2.304 MB de memória. AWS Lambda suporta configurações de memória de 128 MB a 10.240 MB (10 GB), embora aumentar a memória Lambda para além de 2.304 MB não tenha ajudado a diminuir o tempo de execução dessa tarefa específica vinculada à E/S.

A ferramenta [AWS Lambda Power Tuning](https://github.com/alexcasalboni/aws-lambda-power-tuning) foi usada para testar diferentes configurações de memória Lambda e verificar a melhor performance-to-cost proporção para a tarefa. Para obter os resultados dos testes, consulte a seção [Informações adicionais](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional).

## Pré-requisitos e limitações
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Proficiência com desenvolvimento em Python

**Limitações**
+ Uma função Lambda pode ter no máximo [1.024 processos ou threads de execução](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution).
+  Contas da AWS Os novos têm um limite de memória Lambda de 3.008 MB. Ajuste a ferramenta AWS Lambda Power Tuning adequadamente. Para obter mais informações, consulte a seção [Solução de problemas](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting).
+ O Amazon S3 tem um limite de [5.500 GET/HEAD solicitações por segundo por](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html) prefixo particionado.

**Versões do produto**
+ Python 3.9 ou superior
+ AWS Cloud Development Kit (AWS CDK) v2
+ AWS Command Line Interface (AWS CLI) versão 2
+ AWS Lambda Power Tuning 4.3.6 (opcional)

## Arquitetura
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS Lambda
+ Amazon S3
+ AWS Step Functions (se o AWS Lambda Power Tuning estiver implantado)

**Arquitetura de destino**

O diagrama a seguir mostra uma função Lambda que lê objetos de um bucket do S3 em paralelo. O diagrama também tem um fluxo de trabalho Step Functions para que a ferramenta AWS Lambda Power Tuning ajuste a memória da função Lambda. Esse ajuste fino ajuda a alcançar um bom equilíbrio entre custo e desempenho.

![\[Diagrama mostrando a função Lambda, o bucket do S3 e o AWS Step Functions.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/828696e2-6df7-4536-9205-951c99449f4e.png)


**Automação e escala**

As funções Lambda escalam rapidamente quando necessário. Para evitar erros 503 de desaceleração do Amazon S3 durante a alta demanda, recomendamos colocar alguns limites na escalabilidade.

## Ferramentas
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-tools"></a>

**Serviços da AWS**
+ [AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código. A infraestrutura de exemplo foi criada para ser implantada com AWS CDK.
+ [AWS Command Line InterfaceAWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)é uma ferramenta de código aberto que ajuda você a interagir Serviços da AWS por meio de comandos em seu shell de linha de comando. Nesse padrão, a AWS CLI versão 2 é usada para fazer upload de um arquivo JSON de exemplo.
+ 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.
+ [Amazon Simple Storage Service O Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado em nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)é um serviço de orquestração sem servidor que ajuda você a combinar funções AWS Lambda e outros serviços da AWS para criar aplicativos essenciais para os negócios.

**Outras ferramentas**
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral. A [reutilização de threads de trabalho ociosos](https://docs.python.org/3.8/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) foi introduzida na versão 3.8 do Python, e o código da função Lambda nesse padrão foi criado para a versão 3.9 e posterior do Python.

**Repositório de código**

O código desse padrão está disponível no [aws-lambda-parallel-download](https://github.com/aws-samples/aws-lambda-parallel-download) GitHub repositório.

## Práticas recomendadas
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-best-practices"></a>
+ Essa AWS CDK construção depende das suas permissões Conta da AWS de usuário para implantar a infraestrutura. [Se você planeja usar AWS CDK Pipelines ou implantações entre contas, consulte Sintetizadores Stack.](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-synthesizers)
+ Esse aplicativo de exemplo não tem os registros de acesso habilitados no bucket do S3. É uma prática recomendada ativar os registros de acesso no código de produção.

## Épicos
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-epics"></a>

### Prepare o ambiente de desenvolvimento
<a name="prepare-the-development-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique a versão instalada do Python. | Esse código foi testado especificamente no Python 3.9 e no Python 3.13 e deve funcionar em todas as versões entre essas versões. Para verificar sua versão do Python, execute `python3 -V` em seu terminal e instale uma versão mais recente, se necessário.Para verificar se os módulos necessários estão instalados, execute`python3 -c "import pip, venv"`. Nenhuma mensagem de erro significa que os módulos estão instalados corretamente e você está pronto para executar este exemplo.  | Arquiteto de nuvem | 
| Instalar AWS CDK. | Para instalar o, AWS CDK se ainda não estiver instalado, siga as instruções em [Introdução ao AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). Para confirmar se a AWS CDK versão instalada é 2.0 ou posterior, execute`cdk –version`. | Arquiteto de nuvem | 
| Inicialize seu ambiente da . | Para inicializar seu ambiente, se isso ainda não tiver sido feito, siga as instruções em [Inicialize seu ambiente para uso com o. AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping-env.html) | Arquiteto de nuvem | 

### Clone o repositório de exemplo
<a name="clone-the-example-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar a versão mais recente do repositório, execute o seguinte comando:<pre>git clone --depth 1 --branch v1.2.0 \<br />git@github.com:aws-samples/aws-lambda-parallel-download.git</pre> | Arquiteto de nuvem | 
| Altere o diretório de trabalho para o repositório clonado. | Execute este comando: .<pre>cd aws-lambda-parallel-download</pre> | Arquiteto de nuvem | 
| Crie o ambiente virtual Python. | Para criar um ambiente virtual Python, execute o seguinte comando:<pre>python3 -m venv .venv</pre> | Arquiteto de nuvem | 
| Ative o ambiente virtual. | Para ativar o ambiente virtual, execute o seguinte comando:<pre>source .venv/bin/activate</pre> | Arquiteto de nuvem | 
| Instale as dependências. | Para instalar as dependências do Python, execute o comando: `pip`<pre>pip install -r requirements.txt</pre> | Arquiteto de nuvem | 
| Navegue pelo código. | (Opcional) O código de exemplo que baixa um objeto do bucket do S3 está em`resources/parallel.py`.O código da infraestrutura está na `parallel_download` pasta. | Arquiteto de nuvem | 

### Implemente e teste o aplicativo
<a name="deploy-and-test-the-app"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante o aplicativo. | Executar `cdk deploy`.Anote as AWS CDK saídas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Arquiteto de nuvem | 
| Faça upload de um arquivo JSON de exemplo. | O repositório contém um exemplo de arquivo JSON de cerca de 9 KB. Para fazer upload do arquivo no bucket do S3 da pilha criada, execute o seguinte comando:<pre>aws s3 cp sample.json s3://<ParallelDownloadStack.SampleS3BucketName></pre>`<ParallelDownloadStack.SampleS3BucketName>`Substitua pelo valor correspondente da AWS CDK saída. | Arquiteto de nuvem | 
| Execute o aplicativo. | Para executar o aplicativo, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Arquiteto de nuvem | 
| Adicione o número de downloads. | (Opcional) Para executar 1.500 chamadas get object, use o seguinte JSON no **evento JSON do parâmetro**: `Test`<pre>{"repeat": 1500, "objectKey": "sample.json"}</pre> | Arquiteto de nuvem | 

### Opcional: Execute o AWS Lambda Power Tuning
<a name="optional-run-lamlong-power-tuning"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute a ferramenta AWS Lambda Power Tuning. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html)Ao final da execução, o resultado estará na guia de **entrada e saída de execução**. | Arquiteto de nuvem | 
| Veja os resultados do AWS Lambda Power Tuning em um gráfico. | Na guia **Entrada e saída de execução**, copie o link da `visualization` propriedade e cole-o em uma nova guia do navegador. | Arquiteto de nuvem | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova os objetos do bucket do S3. | Antes de destruir os recursos implantados, você remove todos os objetos do bucket do S3:<pre>aws s3 rm s3://<ParallelDownloadStack.SampleS3BucketName> \<br />--recursive</pre>Lembre-se de `<ParallelDownloadStack.SampleS3BucketName>` substituir pelo valor das AWS CDK saídas. | Arquiteto de nuvem | 
| Destrua os recursos. | Para destruir todos os recursos que foram criados para esse piloto, execute o seguinte comando:<pre>cdk destroy</pre> | Arquiteto de nuvem | 

## Solução de problemas
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| `'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008` | Para novas contas, talvez você não consiga configurar mais de 3.008 MB em suas funções do Lambda. Para testar usando o AWS Lambda Power Tuning, adicione a seguinte propriedade no JSON de entrada ao iniciar a execução do Step Functions:<pre>"powerValues": [<br />    512,<br />    1024,<br />    1536,<br />    2048,<br />    2560,<br />    3008<br />  ]</pre> | 

## Recursos relacionados
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-resources"></a>
+ [Python — concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)
+ [Cotas Lambda — configuração, implantação e execução de funções](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution)
+ [Trabalhando com o AWS CDK em Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Funções de criação de perfil com AWS Lambda Power Tuning](https://docs.aws.amazon.com/lambda/latest/operatorguide/profile-functions.html)

## Mais informações
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional"></a>

**Código **

O trecho de código a seguir executa o processamento paralelo I/O :

```
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
  for result in executor.map(a_function, (the_arguments)):
    ...
```

Eles `ThreadPoolExecutor` reutilizam os tópicos quando eles ficam disponíveis.

**Testes e resultados**

Esses testes foram realizados em dezembro de 2024.

O primeiro teste processou 2.500 leituras de objetos, com o seguinte resultado.

![\[O tempo de invocação diminui e o custo da invocação aumenta à medida que a memória aumenta.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f6743412-1e52-4c4c-a51c-ac0f75b3b998.png)


A partir de 3.009 MB, o nível de tempo de processamento permaneceu quase o mesmo em qualquer aumento de memória, mas o custo aumentou à medida que o tamanho da memória aumentou.

Outro teste investigou o intervalo entre 1.536 MB e 3.072 MB de memória, usando valores que eram múltiplos de 256 MB e processando 10.000 leituras de objetos, com os seguintes resultados.

![\[Diminuição da diferença entre a queda do tempo de invocação e o aumento do custo de invocação.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/c75d4443-74d8-4b93-9b4d-b2640869381e.png)


A melhor performance-to-cost proporção foi com a configuração Lambda de 2.304 MB de memória.

Para comparação, um processo sequencial de 2.500 leituras de objetos levou 47 segundos. O processo paralelo usando a configuração Lambda de 2.304 MB levou 7 segundos, o que é 85% menos.

![\[Gráfico mostrando a diminuição no tempo ao mudar do processamento sequencial para o paralelo.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f3dcc44d-ac20-4b75-897d-1d71f0d59781.png)


# Envie dados de telemetria de AWS Lambda para OpenSearch para análise e visualização em tempo real
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization"></a>

*Tabby Ward, Guy Bachar e David Kilzer, Amazon Web Services*

## Resumo
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-summary"></a>

Os aplicativos modernos estão se tornando cada vez mais distribuídos e orientados por eventos, o que reforça a necessidade de monitoramento e observabilidade em tempo real. AWS Lambda é um serviço de computação sem servidor que desempenha um papel crucial na criação de arquiteturas escaláveis e orientadas por eventos. No entanto, monitorar e solucionar problemas de funções do Lambda pode ser um desafio se você confiar exclusivamente no Amazon CloudWatch Logs, que pode introduzir latência e períodos de retenção limitados.

Para enfrentar esse desafio, AWS introduziu a API de telemetria Lambda, que permite que as funções do Lambda enviem dados de telemetria diretamente para ferramentas de monitoramento e observabilidade de terceiros. Essa API oferece suporte a streaming em tempo real de logs, métricas e rastreamentos e fornece uma visão abrangente e oportuna da performance e da integridade de suas funções do Lambda.

Esse padrão explica como integrar a API de telemetria Lambda com [OpenSearch](https://opensearch.org/docs/latest/), que é um mecanismo de pesquisa e análise distribuído de código aberto. OpenSearch oferece uma plataforma poderosa e escalável para ingerir, armazenar e analisar grandes volumes de dados, o que a torna a escolha ideal para dados de telemetria Lambda. Especificamente, esse padrão demonstra como enviar registros de uma função do Lambda escrita em Python diretamente para OpenSearch um cluster usando uma extensão do Lambda fornecida pela. AWS Essa solução é flexível e personalizável, para que você possa criar sua própria extensão do Lambda ou alterar o código-fonte de amostra para alterar o formato de saída conforme desejado.

O padrão explica como instalar e configurar a integração da API de telemetria Lambda e inclui as melhores práticas de segurança OpenSearch, otimização de custos e escalabilidade. O objetivo é ajudar você a obter insights mais profundos sobre suas funções do Lambda e aprimorar a observabilidade geral de suas aplicações sem servidor.


| 
| 
| Observação: esse padrão se concentra na integração da API de telemetria Lambda com a API gerenciada. OpenSearch No entanto, os princípios e técnicas discutidos também são aplicáveis ao autogerenciamento OpenSearch e ao Elasticsearch. | 
| --- |

## Pré-requisitos e limitações
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-prereqs"></a>

Antes de iniciar o processo de integração, verifique se você tem os seguintes pré-requisitos:

**Conta da AWS**: um ativo Conta da AWS com as permissões apropriadas para criar e gerenciar os seguintes AWS recursos:
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+ Amazon OpenSearch Service (se você estiver usando um OpenSearch cluster gerenciado)

**OpenSearch cluster**:
+ Você pode usar um OpenSearch cluster autogerenciado existente ou um serviço gerenciado, como o OpenSearch Service.
+ Se você estiver usando o OpenSearch Serviço, configure seu OpenSearch cluster seguindo as instruções em [Introdução ao Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html) na documentação do OpenSearch Serviço.
+ Certifique-se de que o OpenSearch cluster esteja acessível a partir da sua função Lambda e esteja configurado com as configurações de segurança necessárias, como políticas de acesso, criptografia e autenticação.
+ Configure o OpenSearch cluster com os mapeamentos e configurações de índice necessários para ingerir os dados de telemetria do Lambda. Para obter mais informações, consulte [Carregamento de dados de streaming no Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/integrations.html) na documentação do OpenSearch serviço.

**Conectividade de rede**:
+ Certifique-se de que sua função Lambda tenha a conectividade de rede necessária para acessar o OpenSearch cluster. Para obter orientação sobre como definir as configurações da nuvem privada virtual (VPC), consulte [Lançamento de seus domínios do Amazon OpenSearch Service em uma VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) na documentação do serviço. OpenSearch 

**Políticas e perfis do IAM**:
+ Crie uma função do IAM com as permissões necessárias para que sua função Lambda acesse o OpenSearch cluster e acesse suas credenciais armazenadas nele. AWS Secrets Manager
+ Anexe as políticas apropriadas do IAM à função, como a `AWSLambdaBasicExecutionRole` política e quaisquer permissões adicionais necessárias para interagir com ela OpenSearch.
+ Verifique se as permissões do IAM concedidas à sua função Lambda permitem que ela grave dados no OpenSearch cluster. Para obter informações sobre o gerenciamento de permissões do IAM, consulte [Definir permissões de uma função do Lambda com um perfil de execução](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) na documentação do Lambda.

**Conhecimento em linguagem de programação**:
+ Você precisará de conhecimentos básicos de Python (ou da linguagem de programação de sua escolha) para entender e modificar o código de exemplo da função do Lambda e da extensão do Lambda.

**Ambiente de desenvolvimento**:
+ Configure um ambiente de desenvolvimento local com as ferramentas e dependências necessárias para criar e implantar extensões e funções do Lambda. 

**AWS CLI ou Console de gerenciamento da AWS**:
+ Instale e configure o [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) ou use o Console de gerenciamento da AWS com as credenciais apropriadas para interagir com o necessário Serviços da AWS.

**Monitoramento e registro**:
+ Familiarize-se com as melhores práticas de monitoramento e registro AWS, incluindo serviços como a Amazon CloudWatch e AWS CloudTrail para fins de monitoramento e auditoria.
+ Verifique CloudWatch os registros da sua função Lambda para identificar quaisquer erros ou exceções relacionados à integração da API de telemetria do Lambda. Para obter orientação sobre solução de problemas, consulte a [documentação da API de Telemetria do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html).

## Arquitetura
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-architecture"></a>

Esse padrão usa o OpenSearch Service para armazenar registros e dados de telemetria que são gerados pelas funções do Lambda. Essa abordagem permite que você transmita rapidamente os registros diretamente para o seu OpenSearch cluster, o que reduz a latência e os custos associados ao uso do CloudWatch Logs como intermediário.


| 
| 
| [Seu código de extensão do Lambda pode enviar a telemetria para o OpenSearch Serviço, usando diretamente a OpenSearch API ou usando uma biblioteca cliente. OpenSearch ](https://opensearch.org/docs/latest/clients/index/) A extensão Lambda pode usar as operações em massa suportadas pela OpenSearch API para agrupar eventos de telemetria e enviá-los ao OpenSearch Serviço em uma única solicitação. | 
| --- |

O diagrama de fluxo de trabalho a seguir ilustra o fluxo de trabalho de log para funções Lambda quando você usa OpenSearch um cluster como endpoint.

![\[Fluxo de trabalho para enviar dados de telemetria para um OpenSearch cluster.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/57fe8796-9f36-46cf-8304-f506242b9f04/images/283ccdcd-a0e1-40a2-a95a-3bd046bfa8ca.png)


A arquitetura inclui os seguintes componentes:
+ Função do Lambda: a função sem servidor que gera logs e dados de telemetria durante a execução.
+ Extensão Lambda: uma extensão baseada em Python que usa a API de telemetria Lambda para se integrar diretamente ao cluster. OpenSearch Essa extensão é executada no mesmo ambiente de execução que a função do Lambda.
+ API de telemetria do Lambda: a API que permite que as extensões do Lambda enviem dados de telemetria, incluindo registros, métricas e rastreamentos, diretamente para ferramentas de monitoramento e observabilidade de terceiros.
+ Cluster Amazon OpenSearch Service: um OpenSearch cluster gerenciado hospedado em AWS. Esse cluster é responsável por ingerir, armazenar e indexar os dados de log transmitidos da função do Lambda por meio da extensão do Lambda.

O fluxo de trabalho consiste nas seguintes etapas:

1. A função do Lambda é chamada e gera logs e dados de telemetria durante sua execução.

1. A extensão do Lambda é executada junto com a função de capturar os logs e os dados de telemetria usando a API de Telemetria do Lambda.

1. A extensão Lambda estabelece uma conexão segura com o cluster de OpenSearch serviços e transmite os dados de log em tempo real.

1. O cluster OpenSearch de serviços ingere, indexa e armazena os dados de log para disponibilizá-los para pesquisa, análise e visualização por meio do uso de ferramentas como o Kibana ou outros aplicativos compatíveis.

Ao contornar os CloudWatch registros e enviar dados de registro diretamente para o OpenSearch cluster, essa solução oferece vários benefícios:
+ Streaming e análise de logs em tempo real, permitindo uma solução de problemas mais rápida e uma melhor observabilidade.
+ Latência reduzida e possíveis limitações de retenção associadas aos CloudWatch registros.
+ Flexibilidade para personalizar a extensão do Lambda ou criar sua própria extensão para formatos de saída específicos ou processamento adicional.
+ Integração com os recursos de pesquisa, análise e visualização do OpenSearch Service para análise e monitoramento de registros.

A seção [Epics](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics) fornece step-by-step instruções para configurar a extensão Lambda, configurar a função Lambda e integrar-se ao cluster de serviços. OpenSearch Para considerações de segurança, estratégias de otimização de custos e dicas para monitorar e solucionar problemas da solução, consulte a seção [Práticas recomendadas](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices).

## Ferramentas
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-tools"></a>

**Serviços da AWS**
+ O [AWS Lambda](https://aws.amazon.com/lambda/) é um serviço de computação que permite executar código sem o provisionamento ou gerenciamento de servidores. O Lambda executa o código somente quando necessário e dimensiona automaticamente, desde algumas solicitações por dia até milhares por segundo.
+ O [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) é um serviço totalmente gerenciado fornecido pela empresa AWS que facilita a implantação, a operação e a escalabilidade de OpenSearch clusters na nuvem.
+ As [extensões do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) ampliam a funcionalidade de suas funções do Lambda executando código personalizado junto com elas. Você pode usar as extensões do Lambda para integrar o Lambda a diversas ferramentas para monitoramento, observabilidade, segurança e governança.
+ AWS Lambda A [API de telemetria](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) permite que você use extensões para capturar dados aprimorados de monitoramento e observabilidade diretamente do Lambda e enviá-los para um destino de sua escolha.
+ [CloudFormation](https://aws.amazon.com/cloudformation/)ajuda você a modelar e configurar seus AWS recursos para que você possa passar menos tempo gerenciando esses recursos e mais tempo se concentrando em seus aplicativos.

**Repositórios de códigos**
+ [AWS Lambda As extensões](https://github.com/aws-samples/aws-lambda-extensions) incluem demonstrações e exemplos de projetos da AWS and AWS Partners para ajudar você a começar a criar suas próprias extensões.
+ O [exemplo de integrações de telemetria do Lambda para fornece OpenSearch](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) um exemplo de extensão do Lambda que demonstra como enviar registros de uma função do Lambda para um cluster. OpenSearch 

**Outras ferramentas**
+ [OpenSearch](https://opensearch.org/faq/)é um mecanismo de pesquisa e análise distribuído de código aberto que fornece uma plataforma poderosa para ingerir, armazenar e analisar grandes volumes de dados.
+ O Kibana é uma ferramenta de exploração e visualização de dados de código aberto com a qual você pode usar. OpenSearch Observe que a implementação de visualização e analytics está além do escopo deste padrão. Para obter mais informações, consulte a [documentação do Kibana](https://www.elastic.co/guide/en/kibana/current/index.html) e outros recursos.

## Práticas recomendadas
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices"></a>

Ao integrar a API de telemetria Lambda com OpenSearch, considere as seguintes melhores práticas.

**Segurança e controle de acesso**
+ **Comunicação segura**: criptografe todas as comunicações entre suas funções do Lambda e OpenSearch o cluster usando HTTPS. Defina as SSL/TLS configurações necessárias em sua extensão e OpenSearch configuração do Lambda.
+ **Permissões do IAM**:
  + As extensões são executadas no mesmo ambiente de execução da função do Lambda, portanto, elas herdam o mesmo nível de acesso a recursos, como sistema de arquivos, rede e variáveis de ambiente.
  + Conceda as permissões mínimas necessárias do IAM às suas funções do Lambda para acessar a API de telemetria do Lambda e gravar dados no cluster. OpenSearch Use o [princípio de privilégio mínimo](https://docs.aws.amazon.com/lambda/latest/operatorguide/least-privilege.html) para limitar o escopo das permissões.
+ **OpenSearch controle de acesso**: implemente um controle de acesso refinado em seu OpenSearch cluster para restringir o acesso a dados confidenciais. Use os recursos de segurança integrados, como autenticação de usuário, controle de acesso baseado em funções e permissões em nível de índice, no. OpenSearch
+ **Extensões confiáveis**: sempre instale extensões de uma fonte confiável. Use ferramentas de infraestrutura como código (IaC) CloudFormation para simplificar o processo de anexar a mesma configuração de extensão, incluindo permissões do IAM, a várias funções do Lambda. As ferramentas de IaC também fornecem um registro de auditoria das extensões e versões usadas anteriormente.
+ **Tratamento de dados sensíveis**: ao criar extensões, evite registrar dados sensíveis em log. Limpe as cargas úteis e os metadados antes de registrá-los em log ou mantê-los para fins de auditoria.

**Otimização de custos**
+ **Monitoramento e alertas**: configure mecanismos de monitoramento e alerta para rastrear o volume de dados enviados pelas funções OpenSearch do Lambda. Isso ajudará você a identificar e lidar com possíveis excessos de custos.
+ **Retenção de dados**: considere cuidadosamente o período de retenção de dados apropriado para seus dados de telemetria do Lambda em. OpenSearch Períodos de retenção mais longos podem aumentar os custos de armazenamento, portanto, equilibre suas necessidades de observabilidade com a otimização de custos.
+ **Compressão e indexação**: habilite a compactação de dados e otimize sua estratégia de OpenSearch indexação para reduzir o espaço de armazenamento de seus dados de telemetria Lambda.
+ **Confiança reduzida em CloudWatch**: Ao integrar diretamente a API de telemetria Lambda OpenSearch, você pode potencialmente reduzir sua dependência de CloudWatch registros, o que pode resultar em economia de custos. Isso ocorre porque a API de telemetria Lambda permite que você envie registros diretamente para OpenSearch, o que elimina a necessidade de armazenar e processar os dados. CloudWatch

**Escalabilidade e confiabilidade**
+ Processamento **assíncrono: use padrões de processamento** assíncrono, como Amazon Simple Queue Service (Amazon SQS) ou Amazon Kinesis, para dissociar a execução da função Lambda da ingestão de dados. OpenSearch Isso ajuda a manter a capacidade de resposta das funções do Lambda e melhora a confiabilidade geral do sistema.
+ **OpenSearch escalabilidade de cluster**: monitore o desempenho e a utilização de recursos do seu OpenSearch cluster e aumente-o ou diminua-o conforme necessário para lidar com o volume crescente de dados de telemetria Lambda.
+ **Failover e recuperação de desastres**: implemente uma estratégia robusta de recuperação de desastres para seu OpenSearch cluster, incluindo backups regulares e a capacidade de restaurar dados rapidamente em caso de falha.

**Observabilidade e monitoramento**
+ **Painéis e visualizações**: use o Kibana ou outras ferramentas de painel para criar painéis e visualizações personalizados que forneçam informações sobre o desempenho e a integridade de suas funções do Lambda com base nos dados de telemetria. OpenSearch
+ **Alertas e notificações**: configure alertas e notificações para monitorar proativamente anomalias, erros ou problemas de performance em suas funções do Lambda. Integre esses alertas e notificações aos seus processos existentes de gerenciamento de incidentes.
+ **Rastreamento e correlação**: garanta que seus dados de telemetria do Lambda incluam informações de rastreamento relevantes, como solicitação IDs ou correlação, para permitir a end-to-end observabilidade e a solução de problemas em seus IDs aplicativos distribuídos sem servidor.

Seguindo essas melhores práticas, você pode garantir que sua integração da API de telemetria Lambda OpenSearch seja segura, econômica e escalável, além de fornecer observabilidade abrangente para seus aplicativos sem servidor.

## Épicos
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics"></a>

### Criar e implantar a camada de extensão do Lambda
<a name="build-and-deploy-the-lam-extension-layer"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Faça o download do código-fonte. | Baixe as extensões de exemplo do repositório [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions). | Desenvolvedor de aplicativos, arquiteto de nuvem | 
| Navegue para a pasta `python-example-telemetry-opensearch-extension`. | O repositório [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions) que você baixou contém vários exemplos de casos de uso e runtimes de linguagem. Navegue até a pasta [python-example-telemetry-opensearch-extension](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) para usar a extensão OpenSearch Python, que envia registros para o. OpenSearch | Desenvolvedor de aplicativos, arquiteto de nuvem | 
| Adicione permissões para executar o endpoint da extensão. | Execute o comando a seguir para tornar o endpoint da extensão executável:<pre>chmod +x python-example-telemetry-opensearch-extension/extension.py</pre> | Desenvolvedor de aplicativos, arquiteto de nuvem | 
| Instale as dependências da extensão localmente. | Execute o seguinte comando para instalar as dependências locais do código Python:<pre>pip3 install -r python-example-telemetry-opensearch-extension/requirements.txt -t ./python-example-telemetry-opensearch-extension/</pre>Essas dependências serão montadas junto com o código da extensão. | Desenvolvedor de aplicativos, arquiteto de nuvem | 
| Crie um pacote .zip para a extensão para implantá-la como uma camada. | O arquivo de extensão .zip deve conter um diretório-raiz chamado `extensions/`, onde o executável da extensão está localizado, e outro diretório-raiz chamado `python-example-telemetry-opensearch-extension/`, onde a lógica central da extensão e suas dependências estão localizadas.Crie o pacote .zip para a extensão:<pre>chmod +x extensions/python-example-telemetry-opensearch-extension<br />zip -r extension.zip extensions python-example-telemetry-opensearch-extension</pre> | Desenvolvedor de aplicativos, arquiteto de nuvem | 
| Implante a extensão como uma camada do Lambda. | Publique a camada usando seu arquivo de extensão .zip e o seguinte comando:<pre>aws lambda publish-layer-version \<br />--layer-name "python-example-telemetry-opensearch-extension" \<br />--zip-file "fileb://extension.zip"</pre> | Desenvolvedor de aplicativos, arquiteto de nuvem | 

### Integrar a extensão à sua função
<a name="integrate-the-extension-into-your-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione a camada à função. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Para obter mais informações sobre como adicionar uma camada às funções do Lambda, consulte a [documentação do Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html) | Desenvolvedor de aplicativos, arquiteto de nuvem | 
| Defina as variáveis de ambiente para a função. | Na página da função, escolha a guia **Configuração** e adicione as seguintes variáveis de ambiente à sua função:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | Desenvolvedor de aplicativos, arquiteto de nuvem | 

### Adicione declarações de registro em log e teste sua função
<a name="add-logging-statements-and-test-your-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione declarações de log à sua função. | Adicione instruções de registro em log à sua função usando um dos [mecanismos de registro em log integrados](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html) ou o módulo de registro em log de sua escolha. Confira abaixo alguns exemplos de mensagens de registro em log em Python:<pre>print("Your Log Message Here")<br />logger = logging.getLogger(__name__)<br /><br />logger.info("Test Info Log.")<br />logger.error("Test Error Log.")</pre> | Desenvolvedor de aplicativos, arquiteto de nuvem | 
| Teste a função do . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Você deve ver **Executing function: succeeded** se tudo funcionar corretamente. | Desenvolvedor de aplicativos, arquiteto de nuvem | 

### Visualize seus logins OpenSearch
<a name="view-your-logs-in-opensearch"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Consulte seus índices. | Em OpenSearch, execute o seguinte comando para consultar seus índices:<pre>SELECT * FROM index-name</pre>Seus logs devem ser exibidos nos resultados da consulta. | Arquiteto de nuvem | 

## Solução de problemas
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Problemas de conectividade | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 
| Erros de ingestão de dados | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 

## Recursos relacionados
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-resources"></a>
+ [Exemplo de integrações de telemetria Lambda](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) para (repositório) OpenSearch GitHub 
+ [Ampliar funções do Lambda usando extensões do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) (documentação do Lambda)
+ [API de Telemetria do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) (documentação do Lambda)
+ [Apresentando a API de AWS Lambda telemetria](https://aws.amazon.com/blogs/compute/introducing-the-aws-lambda-telemetry-api/) (AWS postagem no blog)
+ [Integrando a API de AWS Lambda telemetria com o Prometheus](https://aws.amazon.com/blogs/opensource/integrating-the-aws-lambda-telemetry-api-with-prometheus-and-opensearch) e (postagem no blog) OpenSearch AWS 

## Mais informações
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-additional"></a>

**Alterar a estrutura de logs**

Por padrão, a extensão envia registros como um documento aninhado. OpenSearch Isso permite que você realize consultas aninhadas para recuperar valores de colunas individuais.

Se a saída de log padrão não atender às suas necessidades específicas, você poderá personalizá-la modificando o código-fonte da extensão Lambda fornecida pela. AWS AWS incentiva os clientes a adaptar a produção para atender às necessidades de seus negócios. Para alterar a saída do log, localize a função `dispatch_to_opensearch` no arquivo `telemetry_dispatcher.py` dentro do código-fonte da extensão e faça as alterações necessárias.

# Configuração de um roteador celular sem servidor para uma arquitetura baseada em células
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq e Ioannis Lioupras, Amazon Web Services*

## Resumo
<a name="serverless-cell-router-architecture-summary"></a>

Como ponto de entrada para um sistema global de aplicações baseado em células, o roteador celular é responsável por atribuir eficientemente os usuários às células apropriadas e fornecer os endpoints aos usuários. O roteador celular executa funções como armazenar user-to-cell mapeamentos, monitorar a capacidade da célula e solicitar novas células quando necessário. É importante manter a funcionalidade do roteador celular durante possíveis interrupções.

A estrutura de design do roteador celular neste padrão se concentra na resiliência, escalabilidade e otimização geral da performance. O padrão usa roteamento estático, em que os clientes armazenam os endpoints no login inicial e se comunicam diretamente com as células. Esse desacoplamento aumenta a resiliência do sistema, ajudando a garantir a funcionalidade ininterrupta da aplicação baseado em células durante uma deficiência no roteador celular.

Esse padrão usa um AWS CloudFormation modelo para implantar a arquitetura. Para obter detalhes sobre o que o modelo implanta ou sobre como implantar a mesma configuração usando o Console de gerenciamento da AWS, consulte a seção [Informações adicionais](#serverless-cell-router-architecture-additional).

**Importante**  
A demonstração, o código e o CloudFormation modelo apresentados nesse padrão são destinados apenas para fins explicativos. O material fornecido tem o único objetivo de ilustrar o padrão de design e auxiliar na compreensão. A demonstração e o código não estão prontos para produção e não devem ser usados para nenhuma atividade de produção ao vivo. Qualquer tentativa de usar o código ou a demonstração em um ambiente de produção é fortemente desencorajada e é por sua conta e risco. Recomendamos consultar os profissionais adequados e realizar testes completos antes de implementar esse padrão ou qualquer um de seus componentes em um ambiente de produção.

## Pré-requisitos e limitações
<a name="serverless-cell-router-architecture-prereqs"></a>

**Pré-requisitos **
+ Uma conta da Amazon Web Services (AWS) ativa
+ A versão mais recente do [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [Credenciais da AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) com as permissões necessárias para criar a CloudFormation pilha, AWS Lambda as funções e os recursos relacionados

**Versões do produto**
+ Python 3.12

## Arquitetura
<a name="serverless-cell-router-architecture-architecture"></a>

O diagrama a seguir mostra um design de alto nível do roteador celular.

![\[O processo de cinco etapas do roteador celular.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O usuário entra em contato com o Amazon API Gateway, que serve como frente para os endpoints da API do roteador celular.

1. O Amazon Cognito gerencia a autenticação e a autorização.

1. O AWS Step Functions fluxo de trabalho consiste nos seguintes componentes:
   + **Orchestrator** ‒ Os `Orchestrator` usos AWS Step Functions para criar um fluxo de trabalho ou máquina de estado. O fluxo de trabalho é acionado pela API do roteador celular. O `Orchestrator` executa funções do Lambda com base no caminho do recurso.
   + **Dispatcher**: a função do Lambda `Dispatcher` identifica e atribui uma célula estática por novo usuário registrado. A função pesquisa a célula com o menor número de usuários, a atribui ao usuário e retorna os endpoints.
   + **Mapeador** ‒ A `Mapper` operação manipula os user-to-cell mapeamentos no banco de dados do `RoutingDB` Amazon DynamoDB que foi criado pelo modelo. CloudFormation Quando acionada, a função `Mapper` fornece aos usuários já atribuídos seus endpoints.
   + **Scaler**: a função `Scaler` acompanha a ocupação da célula e a capacidade disponível. Quando necessário, a função `Scaler` pode enviar uma solicitação por meio do Amazon Simple Queue Service (Amazon SQS) para a camada de provisionamento e implantação para solicitar novas células.
   + **Validator**: a função `Validator` valida os endpoints da célula e detecta possíveis problemas.

1. Ele `RoutingDB` armazena informações e atributos da célula (endpoints de API Região da AWS, estado, métricas).

1. Quando a capacidade disponível das células excede um limite, o roteador celular solicita serviços de provisionamento e implantação por meio do Amazon SQS para criar novas células.

Quando novas células são criadas, `RoutingDB` é atualizado com base na camada de provisionamento e implantação. No entanto, esse processo está além do escopo desse padrão. Para obter uma visão geral das premissas do projeto de arquitetura baseada em células e detalhes sobre o design do roteador celular usado neste padrão, consulte a seção [Informações adicionais](#serverless-cell-router-architecture-additional).

## Ferramentas
<a name="serverless-cell-router-architecture-tools"></a>

**Serviços da AWS**
+ [O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ajuda você a configurar AWS recursos, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS
+ O [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornece autenticação, autorização e gerenciamento de usuários para suas aplicações Web e móveis.
+ 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.
+ 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.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ O [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) fornece uma fila hospedada segura, durável e disponível que ajuda a integrar e desacoplar sistemas e componentes de software distribuídos.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)é um serviço de orquestração sem servidor que ajuda você a combinar funções do Lambda e outras para criar aplicativos essenciais para os negócios. Serviços da AWS 

**Outras ferramentas**
+ [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [Serverless-Cell-Router](https://github.com/aws-samples/Serverless-Cell-Router/). 

## Práticas recomendadas
<a name="serverless-cell-router-architecture-best-practices"></a>

Para obter as melhores práticas ao criar arquiteturas baseadas em células, consulte a seguinte orientação do Well-Architected AWS :
+ [Reduzir o escopo do impacto com a arquitetura baseada em células](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope-of-impact-with-cell-based-architecture.html)
+ [AWS Pilar de confiabilidade do Well-Architected Framework REL1: 0-BP04 Use arquiteturas de anteparo para limitar o escopo do impacto](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

## Épicos
<a name="serverless-cell-router-architecture-epics"></a>

### Preparar os arquivos de origem
<a name="prepare-source-files"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório de código de exemplo. | Para clonar o Serverless-Cell-Router GitHub repositório no seu computador, use o seguinte comando:<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Desenvolvedor | 
| Configure credenciais AWS CLI temporárias. | Configure o AWS CLI com credenciais para o seu Conta da AWS. Este passo a passo usa credenciais temporárias fornecidas pela **linha de comando do AWS IAM Identity Center ou pela opção de acesso programático**. Isso define as variáveis de `AWS_SESSION_TOKEN` AWS ambiente `AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEY`,, e com as credenciais apropriadas para uso com o. AWS CLI | Desenvolvedor | 
| Criar um bucket do S3. | Crie um bucket do S3 que será usado para armazenar e acessar as funções do Serverless-Cell-Router Lambda para implantação pelo CloudFormation modelo. Para criar o bucket do S3, use o seguinte comando: <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Desenvolvedor | 
| Criar os arquivos .zip. | Crie um arquivo .zip para cada função do Lambda localizada no diretório [Functions](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions). Esses arquivos .zip serão usados para implantar as funções do Lambda. Em um Mac, use os seguintes comandos `zip`:<pre>zip -j mapper-scr.zip Functions/Mapper.py<br />zip -j dispatcher-scr.zip Functions/Dispatcher.py<br />zip -j scaler-scr.zip Functions/Scaler.py<br />zip -j cp validator-scr.zip Functions/Validator.py<br />zip -j dynamodbDummyData-scr.zip Functions/DynamodbDummyData.py</pre> | Desenvolvedor | 
| Copie os arquivos .zip para o bucket do S3. | Para copiar todos os arquivos .zip da função do Lambda para o bucket do S3, use os seguintes comandos:<pre>aws s3 cp mapper-scr.zip s3://<bucket name><br />aws s3 cp dispatcher-scr.zip s3://<bucket name><br />aws s3 cp scaler-scr.zip s3://<bucket name><br />aws s3 cp validator-scr.zip s3://<bucket name><br />aws s3 cp dynamodbDummyData-scr.zip s3://<bucket name></pre> | Desenvolvedor | 

### Crie a CloudFormation pilha
<a name="create-the-cfn-stack"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante o CloudFormation modelo. | Para implantar o CloudFormation modelo, execute o seguinte AWS CLI comando:<pre>aws cloudformation create-stack --stack-name serverless.cell-router \<br />--template-body file://Serverless-Cell-Router-Stack-v10.yaml \<br />--capabilities CAPABILITY_IAM \<br />--parameters ParameterKey=LambdaFunctionMapperS3KeyParameterSCR,ParameterValue=mapper-scr.zip \<br />ParameterKey=LambdaFunctionDispatcherS3KeyParameterSCR,ParameterValue=dispatcher-scr.zip \<br />ParameterKey=LambdaFunctionScalerS3KeyParameterSCR,ParameterValue=scaler-scr.zip \<br />ParameterKey=LambdaFunctionAddDynamoDBDummyItemsS3KeyParameterSCR,ParameterValue=dynamodbDummyData-scr.zip \<br />ParameterKey=LambdaFunctionsS3BucketParameterSCR,ParameterValue=<S3 bucket storing lambda zip files> \<br />ParameterKey=CognitoDomain,ParameterValue=<Cognito Domain Name> \<br />--region <enter your aws region id, e.g. "eu-central-1"></pre> | Desenvolvedor | 
| Verifique o andamento. | Faça login no Console de gerenciamento da AWS, abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation/]()e verifique o progresso do desenvolvimento da pilha. Quando o status for `CREATE_COMPLETE`, a pilha foi implantada com sucesso. | Desenvolvedor | 

### Avaliar e verificar
<a name="assess-and-verify"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atribua células ao usuário. | Para iniciar o `Orchestrator`, execute o seguinte comando curl:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/cells</pre>`Orchestrator` aciona a execução da função `Dispatcher`. `Dispatcher`, por sua vez, verifica a existência do usuário. Se o usuário for encontrado, ele `Dispatcher` retornará o ID da célula e o endpoint URLs associados. Se o usuário não for encontrado, `Dispatcher` alocará uma célula para o usuário e enviará o ID da célula para a função `Scaler` para avaliação da capacidade residual da célula atribuída.A resposta da função `Scaler` é a seguinte:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Desenvolvedor | 
| Recupere as células do usuário. | Para usar o `Orchestrator` para executar a função `Mapper`, execute o seguinte comando:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/mapper</pre>O `Orchestrator` pesquisa a célula atribuída ao usuário e retorna o ID da célula e URLs a seguinte resposta:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Desenvolvedor | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe os recursos. | Para evitar encargos adicionais em sua conta, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | Desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="serverless-cell-router-architecture-resources"></a>

**Referências**
+ [Estabilidade estática usando zonas de disponibilidade](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [Delimitação de isolamento contra falhas da AWS: estabilidade estática](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Vídeo**

[Physalia: arquitetura baseada em células para fornecer maior disponibilidade no Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




[https://www.youtube-nocookie.com/embed/6 Eu sei? RZMFic controles = 0](https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0)

## Mais informações
<a name="serverless-cell-router-architecture-additional"></a>

**Instalações de design de arquitetura baseada em células**

Embora este padrão se concentre no roteador celular, é importante entender todo o ambiente. O ambiente é estruturado em três camadas distintas:
+ A camada de roteamento, ou camada fina, que contém o roteador celular
+ A camada celular, compreendendo várias células
+ A camada de provisionamento e implantação, que provisiona células e implanta a aplicação

Cada camada mantém a funcionalidade mesmo no caso de deficiências que afetem outras camadas. Contas da AWS serve como um limite de isolamento de falhas.

O diagrama a seguir mostra as camadas em alto nível. A camada celular e a camada de provisionamento e implantação estão fora do escopo deste padrão.

![\[A camada de roteamento, a camada celular com várias contas de células e a camada de provisionamento e implantação.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Para obter mais informações sobre a arquitetura baseada em células, consulte [Reducing the Scope of Impact with Cell-Based Architecture: Cell routing](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Padrão de design de roteador celular**

O roteador celular é um componente compartilhado entre as células. Para mitigar possíveis impactos, é importante que a camada de roteamento use um design simplista e escalável horizontalmente que seja o mais fino possível. Servindo como ponto de entrada do sistema, a camada de roteamento consiste somente nos componentes necessários para atribuir eficientemente os usuários às células apropriadas. Os componentes dessa camada não se envolvem no gerenciamento ou na criação de células.

Este padrão usa roteamento estático, o que significa que o cliente armazena em cache os endpoints no login inicial e, posteriormente, estabelece comunicação direta com a célula. Interações periódicas entre o cliente e o roteador celular são iniciadas para confirmar o status atual ou recuperar quaisquer atualizações. Esse desacoplamento intencional permite operações ininterruptas para os usuários existentes em caso de inatividade do roteador celular e fornece funcionalidade e resiliência contínuas dentro do sistema.

Neste padrão, o roteador celular oferece suporte às seguintes funcionalidades:
+ Recuperar dados de células do banco de dados de células na camada de provisionamento e implantação e armazenar ou atualizar o banco de dados local.
+ Atribuir uma célula a cada novo usuário registrado da aplicação usando o algoritmo de atribuição de células.
+ Armazenando o user-to-cells mapeamento no banco de dados local.
+ Verificar a capacidade das células durante a atribuição do usuário e elevar um evento para a máquina de venda automática na camada de provisionamento e implantação para criar células.
+ Usar o algoritmo de critérios de criação de células para fornecer essa funcionalidade.
+ Responder às solicitações do usuário recém-registrado fornecendo as URLs células estáticas. Eles URLs serão armazenados em cache no cliente com um tempo de vida (TTL).
+ Responder às solicitações existentes do usuário de um URL inválido fornecendo um URL novo ou atualizado.

Para entender melhor o roteador celular de demonstração configurado pelo CloudFormation modelo, revise os seguintes componentes e etapas:

1. Definir e configurar o grupo de usuários do Amazon Cognito.

1. Definir e configurar a API do API Gateway para o roteador celular.

1. Crie uma tabela do DynamoDB.

1. Criar e configurar uma fila do SQS.

1. Implementar o `Orchestrator`.

1. Implemente as funções do Lambda: `Dispatcher`, `Scaler`, `Mapper`, `Validator`.

1. Avaliar e verificar.

O pressuposto é que a camada de provisionamento e implantação já esteja estabelecida. Os detalhes de implementação estão além do escopo desse artefato.

Como esses componentes são configurados e configurados por um CloudFormation modelo, as etapas a seguir são apresentadas de forma descritiva e de alto nível. A suposição é que você tenha as AWS habilidades necessárias para concluir a instalação e a configuração.

*1. Definir e configurar o grupo de usuários do Amazon Cognito*

Faça login no e abra Console de gerenciamento da AWS o console do Amazon Cognito em. [https://console.aws.amazon.com/cognito/]() Defina e configure um grupo de usuários do Amazon Cognito chamado `CellRouterPool`, com integração de aplicações, interface de usuário hospedada e as permissões necessárias.

*2. Definir e configurar a API do API Gateway para o roteador celular*

Abra o console do API Gateway em [https://console.aws.amazon.com/apigateway/](). Defina e configure uma API chamada `CellRouter`, usando um autorizador do Amazon Cognito integrado ao grupo de usuários `CellRouterPool` do Amazon Cognito. Implemente os seguintes elementos:
+ Recursos da API `CellRouter`, incluindo os métodos `POST`
+ Integração com o fluxo de trabalho do Step Functions implementado na etapa 5
+ Autorização por meio do autorizador do Amazon Cognito
+ Mapeamentos de solicitações e respostas de integração
+ Alocação das permissões necessárias

*3. Criar uma tabela do DynamoDB*

Abra o console do DynamoDB [https://console.aws.amazon.com/dynamodb/]()em e crie uma tabela padrão do DynamoDB chamada com a seguinte configuração: `tbl_router`
+ **Chave de partição** ‒ `marketId`
+ **Chave de classificação** ‒ `cellId`
+ **Modo de capacidade**: provisionada
+ **Point-in-time recovery (PITR) ‒ Desligado**

Na guia **Índices**, crie um índice secundário global chamado `marketId-currentCapacity-index`. A função do Lambda `Scaler` usará o índice para realizar pesquisas eficientes na célula com o menor número de usuários atribuídos.

Crie a estrutura da tabela com os seguintes atributos:
+ `marketId`: Europa
+ `cellId` ‒ cell-0002
+ `currentCapacity`: 2
+ `endPoint_1`: <seu endpoint da primeira região>
+ `endPoint_2`: <seu endpoint da segunda região>
+ `IsHealthy`: True
+ `maxCapacity`: 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds` ‒ <seu endereço de e-mail>

*4. Criar e configurar uma fila SQS*

**Abra o console do Amazon SQS em [https://console.aws.amazon.com/sqs/]()e crie uma fila SQS padrão chamada configurada com criptografia de chave do `CellProvisioning` Amazon SQS.**

*5. Implementar o orquestrador*

Desenvolva um fluxo de trabalho do Step Functions para servir como `Orchestrator` para o roteador. O fluxo de trabalho pode ser chamado por meio da API do roteador celular. O fluxo de trabalho executa as funções do Lambda designadas com base no caminho do recurso. Integre a função step com a API do API Gateway para o roteador celular `CellRouter` e configure as permissões necessárias para invocar as funções do Lambda.

O diagrama mostra o fluxo de trabalho. O estado de escolha invoca uma das funções do Lambda. Se a função do Lambda for bem-sucedida, o fluxo de trabalho será encerrado. Se a função do Lambda falhar, o estado de falha será chamado.

![\[Um diagrama do fluxo de trabalho com as quatro funções e terminando em um estado de falha.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Implementar as funções do Lambda*

Implemente as funções `Dispatcher`, `Mapper`, `Scaler` e `Validator`. Ao configurar cada função na demonstração, defina uma função para a função e atribua as permissões necessárias para realizar as operações necessárias na tabela do DynamoDB `tbl_router`. Além disso, integre cada função ao fluxo de trabalho `Orchestrator`.

*Função Dispatcher*

A função `Dispatcher` é responsável por identificar e atribuir uma única célula estática para cada novo usuário cadastrado. Quando um novo usuário se registra na aplicação global, a solicitação vai para a função `Dispatcher`. A função processa a solicitação usando critérios de avaliação predefinidos, como os seguintes:

1. **Região**: selecione a célula no mercado em que o usuário está localizado. Por exemplo, se o usuário estiver acessando o aplicativo global da Europa, selecione uma célula que use Regiões da AWS na Europa.

1. **Proximidade ou latência**: selecione a célula mais próxima do usuário. Por exemplo, se o usuário estiver acessando a aplicação da Holanda, a função considera uma célula que usa Frankfurt e Irlanda. A decisão sobre qual célula está mais próxima é baseada em métricas como latência entre a localização do usuário e as regiões da célula. Neste exemplo de padrão, as informações são alimentadas estaticamente por meio da camada de provisionamento e implantação.

1. **Integridade**: a função `Dispatcher` verifica se a célula selecionada está íntegra com base no estado da célula fornecido (Healthy = true ou false).

1. **Capacidade**: a distribuição do usuário é baseada no *menor número de usuários em uma lógica de célula*, portanto, o usuário é atribuído à célula que tem o menor número de usuários.

**nota**  
Esses critérios são apresentados apenas para explicar esse padrão de exemplo. Para uma implementação real de roteador celular, você pode definir critérios mais refinados e baseados em casos de uso.

O `Orchestrator` invoca a função Dispatcher para atribuir usuários às células. Nessa função de demonstração, o valor de mercado é um parâmetro estático definido como `europe`.

A função `Dispatcher` avalia se uma célula já está atribuída ao usuário. Se a célula já estiver atribuída, a função `Dispatcher` retornará os endpoints da célula. Se nenhuma célula for atribuída ao usuário, a função pesquisará a célula com o menor número de usuários, a atribuirá ao usuário e retornará os endpoints. A eficiência da consulta de pesquisa celular é otimizada usando o índice secundário global.

*Função Mapper*

A `Mapper` função supervisiona o armazenamento e a manutenção dos user-to-cell mapeamentos no banco de dados. Uma única célula é alocada para cada usuário registrado. Cada célula tem duas células distintas URLs — uma para cada região da AWS. Servindo como endpoints de API hospedados no API Gateway, eles URLs funcionam como pontos de entrada para o aplicativo global.

Quando a `Mapper` função recebe uma solicitação do aplicativo cliente, ela executa uma consulta na `tbl_router` tabela do DynamoDB para recuperar user-to-cell o mapeamento associado ao ID de e-mail fornecido. Se encontrar uma célula atribuída, a `Mapper` função fornecerá imediatamente as duas URLs células. A `Mapper` função também monitora ativamente as alterações na célula URLs e inicia notificações ou atualizações nas configurações do usuário.

*Função Scaler*

A função `Scaler` gerencia a capacidade residual da célula. Para cada nova solicitação de registro de usuário, a função `Scaler` avalia a capacidade disponível da célula que a função `Dispatcher` atribuiu ao usuário. Se a célula tiver atingido seu limite predeterminado de acordo com os critérios de avaliação especificados, a função iniciará uma solicitação por meio de uma fila do Amazon SQS para a camada de provisionamento e implantação, solicitando o provisionamento e a implantação de novas células. O dimensionamento das células pode ser executado com base em um conjunto de critérios de avaliação, como os seguintes:

1. **Máximo de usuários**: cada célula pode ter um número máximo de 500 usuários.

1. **Capacidade do buffer**: a capacidade do buffer de cada célula é de 20%, o que significa que cada célula pode ser atribuída a 400 usuários a qualquer momento. Os 20% restantes da capacidade de buffer são reservados para futuros casos de uso e tratamento de cenários inesperados (por exemplo, quando os serviços de criação e provisionamento de células não estão disponíveis).

1. **Criação de células**: assim que uma célula existente atinge 70% da capacidade, uma solicitação é acionada para criar uma célula adicional.

**nota**  
Esses critérios são apresentados apenas para explicar esse padrão de exemplo. Para uma implementação real de roteador celular, você pode definir critérios mais refinados e baseados em casos de uso.

O código de demonstração `Scaler` é executado pelo `Orchestrator` depois que `Dispatcher` atribuir uma célula com sucesso ao usuário recém-registrado. Ao receber o ID da célula do `Dispatcher`, o `Scaler` avalia se a célula designada tem capacidade adequada para acomodar usuários adicionais, com base em critérios de avaliação predefinidos. Se a capacidade da célula for insuficiente, a função `Scaler` enviará uma mensagem para o serviço Amazon SQS. Essa mensagem é recuperada pelo serviço na camada de provisionamento e implantação, iniciando o provisionamento de uma nova célula.

**Função Validador**

A função `Validator` identifica e resolve problemas relacionados ao acesso à célula. Quando um usuário faz login no aplicativo global, o aplicativo recupera as células das configurações do perfil URLs do usuário e encaminha as solicitações do usuário para uma das duas regiões atribuídas dentro da célula. Se URLs estiverem inacessíveis, o aplicativo poderá enviar uma solicitação de URL de validação para o roteador celular. O roteador celular `Orchestrator` invoca o `Validator`. O `Validator` inicia o processo de validação. A validação pode incluir, entre outras verificações, o seguinte:
+ Célula de referência cruzada URLs na solicitação com URLs armazenada no banco de dados para identificar e processar possíveis atualizações
+ Executar uma verificação de integridade profunda (por exemplo, uma solicitação `HTTP GET` para o endpoint da célula)

Concluindo, a função `Validator` fornece respostas às solicitações da aplicação do cliente, fornecendo o status de validação junto com todas as etapas de remediação necessárias.

O `Validator` projetado para aprimorar a experiência do usuário. Considere um cenário em que determinados usuários tenham dificuldade em acessar a aplicação global porque um incidente faz com que as células fiquem temporariamente indisponíveis. Em vez de apresentar erros genéricos, a função `Validator` pode fornecer etapas instrutivas de correção. Essas etapas talvez incluam as seguintes ações:
+ Informe os usuários sobre o incidente.
+ Forneça um tempo de espera aproximado antes da disponibilidade do serviço.
+ Forneça um número de contato de suporte para obter informações adicionais.

O código de demonstração da `Validator` função verifica se a célula fornecida pelo usuário URLs na solicitação corresponde aos registros armazenados na `tbl_router` tabela. A função `Validator` também verifica se as células estão íntegras.

# Configuração do acesso privado a um bucket do Amazon S3 por meio de um endpoint da VPC
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint"></a>

*Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama e Joaquin Rinaudo, Amazon Web Services*

## Resumo
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-summary"></a>

No Amazon Simple Storage Service (Amazon S3), os URLs pré-assinados permitem que você compartilhe arquivos de tamanho arbitrário com os usuários-alvo. Por padrão, os Amazon S3 pré-assinados podem ser URLs acessados pela Internet dentro de um prazo de validade, o que os torna fáceis de usar. No entanto, ambientes corporativos geralmente exigem que o acesso ao Amazon S3 pré-assinado URLs seja limitado apenas a uma rede privada.

Esse padrão apresenta uma solução sem servidor para interagir com segurança com objetos do S3 usando URLs pré-assinados de uma rede privada sem passagem pela Internet. Na arquitetura, os usuários acessam um Application Load Balancer por meio de um nome de domínio interno. O tráfego é roteado internamente pelo Amazon API Gateway e por um endpoint da nuvem privada virtual (VPC) para o bucket do S3. A AWS Lambda função gera arquivos pré-assinados URLs para download por meio do endpoint VPC privado, o que ajuda a aumentar a segurança e a privacidade de dados confidenciais.

## Pré-requisitos e limitações
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-prereqs"></a>

**Pré-requisitos **
+ Uma VPC que inclui uma sub-rede implantada em uma Conta da AWS que está conectada à rede corporativa (por exemplo, por meio de). AWS Direct Connect

**Limitações**
+ O bucket do S3 deve ter o mesmo nome do domínio, portanto, recomendamos que você verifique as [regras de nomenclatura para buckets do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).
+ Essa arquitetura de amostra não inclui recursos de monitoramento para a infraestrutura implantada. Se o seu caso de uso exigir monitoramento, considere adicionar os [serviços de monitoramento da AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Essa arquitetura de amostra não inclui validação de entradas. Se seu caso de uso exigir validação de entrada e um maior nível de segurança, considere [usar AWS WAF para proteger sua API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Essa arquitetura de amostra não inclui registro em log de acesso com o Application Load Balancer. Se o seu caso de uso exigir registro em log de acessos, considere [habilitar os logs de acesso do balanceador de carga](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html).

**Versões**
+ Python versão 3.11 ou posterior
+ Terraform versão 1.6 ou posterior

## Arquitetura
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-architecture"></a>

**Pilha de tecnologias de destino**

Os seguintes serviços da AWS fazem parte da pilha de tecnologia de destino:
+ O **Amazon S3** é o serviço principal de armazenamento, usado para fazer upload, download e armazenar arquivos com segurança.
+ O **Amazon API Gateway** disponibiliza recursos e endpoints para interagir com o bucket do S3. Esse serviço desempenha um papel na geração de dados pré-assinados URLs para download ou upload.
+ **AWS Lambda**gera arquivos pré-assinados URLs para baixar arquivos do Amazon S3. A função do Lambda é acionada pelo API Gateway.
+ A **Amazon VPC** implanta recursos dentro de uma VPC para fornecer isolamento de rede. A VPC inclui sub-redes e tabelas de rotas para controlar o fluxo de tráfego.
+ O **Application Load Balancer** roteia o tráfego de entrada para o API Gateway ou para o endpoint da VPC do bucket do S3. Isso permite o acesso interno a recursos por parte de usuários da rede corporativa.
+ O **endpoint da VPC para o Amazon S3** permite comunicação direta e privada entre os recursos na VPC e o Amazon S3, sem usar a internet pública.
+ **AWS Identity and Access Management (IAM)** controla o acesso aos AWS recursos. As permissões são configuradas para garantir interações seguras com a API e com outros serviços.

**Arquitetura de destino**

![\[Configuração do acesso privado a um bucket do S3 por meio de um endpoint da VPC\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/683ca6a1-789c-4444-bcbf-e4e80d253df3/images/1ca7ee17-d346-4eb9-bf61-ccf42528a401.png)


O diagrama ilustra o seguinte:

1. Os usuários da rede corporativa podem acessar o Application Load Balancer por meio de um nome de domínio interno. Supomos que exista uma conexão entre a rede corporativa e a sub-rede da intranet no Conta da AWS (por exemplo, por meio de uma Direct Connect conexão).

1. O Application Load Balancer encaminha o tráfego de entrada para o API Gateway para gerar dados pré-assinados URLs para download ou upload para o Amazon S3 ou para o endpoint VPC do bucket do S3. Em ambos os cenários, as solicitações são tratadas internamente, sem a necessidade de usar a internet.

1. O API Gateway disponibiliza recursos e endpoints para interagir com o bucket do S3. Neste exemplo, fornecemos um endpoint para download de arquivos do bucket do S3, mas a funcionalidade poderia ser ampliada para incluir uploads.

1. A função do Lambda gera o URL assinado previamente para fazer o download de um arquivo do Amazon S3 usando o nome de domínio do Application Load Balancer em vez do domínio público do Amazon S3.

1. O usuário obtém o URL assinado previamente e o usa para fazer o download do arquivo do Amazon S3 por meio do Application Load Balancer. O balanceador de carga inclui uma rota padrão para enviar o tráfego que não se destina à API para o endpoint da VPC do bucket do S3.

1. O endpoint da VPC roteia o URL assinado previamente com o nome de domínio personalizado para o bucket do S3. É necessário que o bucket do S3 tenha o mesmo nome do domínio.

**Automação e escala**

Esse padrão usa o Terraform para implantar a infraestrutura do repositório de código em uma Conta da AWS.

## Ferramentas
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-tools"></a>

**Ferramentas**
+ O [Python](https://www.python.org/) é uma linguagem de programação de computador de uso geral.
+ [O Terraform](https://www.terraform.io/) é uma ferramenta de infraestrutura como código (IaC) HashiCorp que ajuda você a criar e gerenciar recursos na nuvem e no local.
+ [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 AWS serviços por meio de comandos em seu shell de linha de comando.

**Repositório de código**

O código desse padrão está disponível em um GitHub repositório em [https://github.com/aws-samples/private-s3-vpce](https://github.com/aws-samples/private-s3-vpce).

## Práticas recomendadas
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-best-practices"></a>

A arquitetura de amostra para esse padrão usa [permissões do IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) para controlar o acesso à API. Qualquer pessoa com credenciais válidas do IAM pode chamar a API. Se o seu caso de uso exigir um modelo de autorização mais complexo, talvez você precise [usar um mecanismo de controle de acesso diferente](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).

## Épicos
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-epics"></a>

### Implemente a solução em um Conta da AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Obtenha AWS credenciais. | Revise suas AWS credenciais e seu acesso à sua conta. Para obter instruções, consulte [Configurações e configurações do arquivo de credenciais](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) na AWS CLI documentação. | AWS DevOps, AWS geral | 
| Clonar o repositório. | Clone o GitHub repositório fornecido com esse padrão:<pre>git clone https://github.com/aws-samples/private-s3-vpce</pre> | AWS DevOps, AWS geral | 
| Configure as variáveis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS geral | 
| Implante a solução. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS geral | 

### Testar a solução
<a name="test-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um arquivo de teste. | Faça upload de um arquivo para o Amazon S3 para criar um cenário de teste para o download do arquivo. Você pode usar o [console do Amazon S3](https://console.aws.amazon.com/s3/) ou o seguinte comando: AWS CLI <pre>aws s3 cp /path/to/testfile s3://your-bucket-name/testfile</pre> | AWS DevOps, AWS geral | 
| Teste a funcionalidade do URL assinado previamente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS geral | 
| Limpeza. | Certifique-se de remover os recursos quando não forem mais necessários:<pre>terraform destroy</pre> | AWS DevOps, AWS geral | 

## Solução de problemas
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Os nomes de chaves de objetos do S3 com caracteres especiais, como o símbolo de cerquilha (\$1), quebram os parâmetros da URL e causam erros. | Faça a codificação adequada dos parâmetros do URL e garanta que o nome da chave do objeto S3 esteja em conformidade com as [diretrizes do Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html). | 

## Recursos relacionados
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-resources"></a>

Amazon S3:
+ [Compartilhando objetos com presignados URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)
+ [Controle do acesso a partir de VPC endpoints com políticas de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)

Amazon API Gateway:
+ [Use políticas de endpoint VPC para uso privado APIs no API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)

Application Load Balancer:
+ [Hospedagem de sites estáticos HTTPS internos com ALB, S3 e PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) (AWS postagem do blog)

# Solucione problemas de estados AWS Step Functions usando o Amazon Bedrock
<a name="troubleshooting-states-in-aws-step-functions"></a>

*Aniket Kurzadkar e Sangam Kushwaha, Amazon Web Services*

## Resumo
<a name="troubleshooting-states-in-aws-step-functions-summary"></a>

AWS Step Functions os recursos de tratamento de erros podem ajudar você a ver um erro que ocorre durante um estado em um [fluxo de trabalho](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html), mas ainda pode ser um desafio encontrar a causa raiz de um erro e depurá-lo. Este padrão aborda esse desafio e mostra como o Amazon Bedrock pode ajudar você a solucionar erros que ocorrem durante estados no Step Functions. 

O Step Functions disponibiliza orquestração de fluxos de trabalho, o que ajuda os desenvolvedores a automatizar processos com mais facilidade. Além disso, o Step Functions fornece funcionalidades de tratamento de erros que proporcionam os seguintes benefícios:
+ Os desenvolvedores podem criar aplicações mais resilientes, que não falham completamente quando ocorre algum problema.
+ Os fluxos de trabalho podem usar lógica condicional para lidar com cada tipo de erro de forma diferenciada.
+ O sistema é capaz de tentar executar novamente operações que falharam automaticamente, possivelmente adotando um mecanismo de recuo exponencial.
+ Caminhos de execução alternativos podem ser definidos para cenários de erro, permitindo que o fluxo de trabalho se adapte e continue o processamento.

Quando ocorre um erro em um fluxo de trabalho do Step Functions, este padrão mostra como a mensagem de erro e o contexto podem ser enviados para um modelo de base (FM), como o Claude 3, que é compatível com o Step Functions. O FM pode analisar o erro, categorizá-lo e sugerir possíveis etapas de correção.

## Pré-requisitos e limitações
<a name="troubleshooting-states-in-aws-step-functions-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Noções básicas sobre o [AWS Step Functions e os fluxos de trabalho](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html)
+ [Conectividade com a API](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html) do Amazon Bedrock

**Limitações**
+ Você pode usar a abordagem deste padrão para vários Serviços da AWS. No entanto, os resultados podem variar de acordo com a solicitação criada por, AWS Lambda que é posteriormente avaliada pelo Amazon Bedrock.
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="troubleshooting-states-in-aws-step-functions-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho e os componentes da arquitetura desse padrão.

![\[Fluxo de trabalho para tratamento de erros e envio de notificações usando o Step Functions, o Amazon Bedrock e o Amazon SNS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/78f86c74-c9de-4562-adcc-105b87a77a54/images/d8eda499-ea1d-45e5-8a36-e04a44ad5c4b.png)


O diagrama apresenta o fluxo de trabalho automatizado para tratamento de erros e envio de notificações em uma máquina de estado do Step Functions:

1. O desenvolvedor inicia a execução de uma máquina de estado.

1. A máquina de estado do Step Functions começa a processar os estados. Existem dois resultados possíveis:
   + (a) Se todos os estados forem executados com êxito, o fluxo de trabalho segue diretamente para o Amazon SNS para envio de uma notificação de sucesso por e-mail.
   + (b) Se algum estado falhar, o fluxo de trabalho é direcionado para a função do Lambda responsável pelo tratamento de erros.

1. Em caso de erros, o seguinte processo é executado:
   + (a) A função do Lambda (responsável pelo tratamento de erros) é acionada. A função do Lambda extrai a mensagem de erro contida nos dados do evento transmitidos pela máquina de estado do Step Functions. Posteriormente, a função do Lambda prepara um prompt fundamentado na mensagem de erro e o encaminha ao Amazon Bedrock. O prompt solicita soluções e sugestões relacionadas ao erro específico identificado.
   + (b) O Amazon Bedrock, que hospeda o modelo de IA generativa, realiza o processamento do prompt de entrada. (Esse padrão usa o modelo básico Anthropic Claude 3 (FM), que é um dos muitos que o FMs Amazon Bedrock suporta.) O modelo de IA analisa o contexto do erro. Em seguida, o modelo gera uma resposta que pode incluir explicações sobre a razão pela qual o erro ocorreu, soluções potenciais para resolvê-lo e sugestões para evitar a recorrência do mesmo erro no futuro.

     O Amazon Bedrock retorna a resposta gerada por IA para a função do Lambda. A função do Lambda realiza o processamento da resposta, com potencial formatação ou extração de informações importantes. Posteriormente, a função do Lambda envia a resposta para a saída da máquina de estado.

1. Após o tratamento de erros ou a execução com êxito, o fluxo de trabalho é concluído acionando o Amazon SNS para enviar uma notificação por e-mail.

## Ferramentas
<a name="troubleshooting-states-in-aws-step-functions-tools"></a>

**Serviços da AWS**
+ [O Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) é um serviço totalmente gerenciado que disponibiliza modelos básicos de alto desempenho (FMs) das principais startups de IA e da Amazon para seu uso por meio de uma API unificada.
+ 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.
+ O [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)é um serviço de orquestração sem servidor que ajuda você a combinar AWS Lambda funções e outras Serviços da AWS para criar aplicativos essenciais para os negócios.

## Práticas recomendadas
<a name="troubleshooting-states-in-aws-step-functions-best-practices"></a>
+ Considerando que o Amazon Bedrock é um modelo de IA generativa que aprende com base em dados treinados, ele também utiliza esses dados para treinamento e geração de contexto. Como uma prática recomendada, oculte qualquer informação privada que possa causar problemas de vazamento de dados. 
+ Embora a IA generativa possa fornecer insights valiosos, decisões críticas de tratamento de erros ainda devem contar com supervisão humana, especialmente em ambientes de produção.

## Épicos
<a name="troubleshooting-states-in-aws-step-functions-epics"></a>

### Criação de uma máquina de estado para o fluxo de trabalho
<a name="create-a-state-machine-for-your-workflow"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar uma máquina de estado do . | Para criar uma máquina de estado adequada ao seu fluxo de trabalho, realize as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Criar uma função do Lambda
<a name="create-a-lam-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma função do Lambda.  | Para criar uma função do Lambda, realize as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 
| Configure a lógica necessária no código do Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html)<pre>client = boto3.client(<br />        service_name="bedrock-runtime", region_name="selected-region"<br />    )<br /><br />    # Invoke Claude 3 with the text prompt<br />    model_id = "your-model-id" # Select your Model ID, Based on the Model Id, Change the body format<br /><br />    try:<br />        response = client.invoke_model(<br />            modelId=model_id,<br />            body=json.dumps(<br />                {<br />                    "anthropic_version": "bedrock-2023-05-31",<br />                    "max_tokens": 1024,<br />                    "messages": [<br />                        {<br />                            "role": "user",<br />                            "content": [{"type": "text", "text": prompt}],<br />                        }<br />                    ],<br />                }<br />            ),<br />        )<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Integração do Step Functions com o Lambda
<a name="integrate-sfn-with-lam"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o Lambda para tratar erros no Step Functions. | Para configurar o Step Functions de forma a tratar erros sem interromper o fluxo de trabalho, realize as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

## Solução de problemas
<a name="troubleshooting-states-in-aws-step-functions-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O Lambda não tem permissão para acessar a API do Amazon Bedrock (ação não autorizada) | Este erro ocorre quando o perfil do Lambda não tem permissão para acessar a API do Amazon Bedrock. Para resolver esse problema, adicione a política `AmazonBedrockFullAccess` ao perfil do Lambda. Para obter mais informações, consulte [AmazonBedrockFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html)o *Guia de referência de políticas AWS gerenciadas*. | 
| Erro de tempo limite do Lambda | Em alguns casos, a geração e o envio da resposta podem demorar mais de 30 segundos, dependendo do prompt. Para resolver esse problema, aumente o tempo de configuração. Para obter mais informações, consulte [Configurar tempo limite da função do Lambda](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html) no *Guia do desenvolvedor do AWS Lambda *. | 

## Recursos relacionados
<a name="troubleshooting-states-in-aws-step-functions-resources"></a>
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Amazon Bedrock API access](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)
+ [Crie sua primeira função Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [Desenvolvendo fluxos de trabalho com Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/developing-workflows.html#development-run-debug)
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 

# Mais padrões
<a name="serverless-more-patterns-pattern-list"></a>

**Topics**
+ [Acesse, consulte e una tabelas do Amazon DynamoDB usando o Athena](access-query-and-join-amazon-dynamodb-tables-using-athena.md)
+ [Automatize as CodeGuru avaliações da Amazon para aplicativos AWS CDK Python usando o Actions GitHub](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Automatize a avaliação de recursos da AWS](automate-aws-resource-assessment.md)
+ [Automatize a implantação de aplicativos aninhados usando o AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Automatize a implantação de Cadeia de Suprimentos AWS data lakes em uma configuração de vários repositórios usando GitHub Actions, Artifactory e Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Automatize a replicação de instâncias do Amazon RDS em Contas da AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Arquivar automaticamente itens no Amazon S3 usando o DynamoDB TTL](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.md)
+ [Detecte alterações automaticamente e inicie diferentes CodePipeline pipelines para um monorepo em CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Crie uma arquitetura sem servidor multilocatário no Amazon Service OpenSearch](build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.md)
+ [Crie um visualizador avançado de arquivos de mainframe na Nuvem AWS](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [Calcule o value at risk (VaR – valor em risco) usando os serviços da AWS](calculate-value-at-risk-var-by-using-aws-services.md)
+ [Copie os produtos do AWS Service Catalog em diferentes contas e regiões da AWS](copy-aws-service-catalog-products-across-different-aws-accounts-and-aws-regions.md)
+ [Criar pipelines dinâmicos de CI para projetos Java e Python automaticamente](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Decomponha monólitos em microsserviços usando o CQRS e o fornecimento de eventos](decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.md)
+ [Implante um aplicativo de página única baseado em React no Amazon S3 e CloudFront](deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.md)
+ [Implante uma API do Amazon API Gateway em um site interno usando endpoints privados e um Application Load Balancer](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Implante e gerencie um data lake de tecnologia sem servidor na Nuvem AWS usando a infraestrutura como código](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Implemente um caso de uso do RAG AWS usando o Terraform e o Amazon Bedrock](deploy-rag-use-case-on-aws.md)
+ [Desenvolvimento de um assistente totalmente automatizado baseado em chat usando os agentes e as bases de conhecimento do Amazon Bedrock](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.md)
+ [Desenvolva assistentes avançados baseados em bate-papo com IA generativa usando RAG e prompting ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Gere dinamicamente uma política do IAM com o IAM Access Analyzer usando Step Functions](dynamically-generate-an-iam-policy-with-iam-access-analyzer-by-using-step-functions.md)
+ [Incorpore componentes visuais do Amazon Quick Sight em aplicativos web usando a automação do Amazon Cognito e do IaC](embed-quick-sight-visual-components-into-web-apps-cognito-iac.md)
+ [Garanta que o registro do Amazon EMR no Amazon S3 esteja habilitado no lançamento](ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch.md)
+ [Expressa o custo de uma tabela do DynamoDB para capacidade sob demanda](estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.md)
+ [Gere recomendações personalizadas e reclassificadas usando o Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Gerar dados de teste usando um trabalho do AWS Glue e Python](generate-test-data-using-an-aws-glue-job-and-python.md)
+ [Implemente SHA1 o hashing para dados de PII ao migrar do SQL Server para o PostgreSQL](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Implementar o padrão de saga com tecnologia sem servidor usando o AWS Step Functions](implement-the-serverless-saga-pattern-by-using-aws-step-functions.md)
+ [Melhore o desempenho operacional habilitando o Amazon DevOps Guru em várias regiões e contas da AWS e OUs com o AWS CDK](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Lance um CodeBuild projeto em várias contas da AWS usando Step Functions e uma função de proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Migração de workloads do Apache Cassandra para o Amazon Keyspaces usando o AWS Glue](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [Monitore o uso de uma Amazon Machine Image compartilhada em várias Contas da AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Otimize implantações sem servidor de várias contas usando os fluxos de trabalho e Actions AWS CDK GitHub](optimize-multi-account-serverless-deployments.md)
+ [Organize um pipeline de ETL com validação, transformação e particionamento usando AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Consulte tabelas do Amazon DynamoDB com SQL usando o Amazon Athena](query-amazon-dynamodb-tables-sql-amazon-athena.md)
+ [Executar workloads agendadas e orientadas por eventos em grande escala com o AWS Fargate](run-event-driven-and-scheduled-workloads-at-scale-with-aws-fargate.md)
+ [Envio de atributos personalizados para o Amazon Cognito e injeção desses atributos em tokens](send-custom-attributes-cognito.md)
+ [Ofereça conteúdo estático em um bucket do Amazon S3 por meio de uma VPC usando a Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Desenvolvimento e implantação simplificados de bots do Amazon Lex usando um fluxo de trabalho automatizado](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Estruture um projeto Python em arquitetura hexagonal usando o AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Traduza a linguagem natural em consultas DSL para consultas OpenSearch e Elasticsearch](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [Descarregamento de dados de um cluster do Amazon Redshift entre contas para o Amazon S3](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.md)
+ [Coordene a dependência de recursos e a execução de tarefas usando a AWS Fargate WaitCondition construção de gancho](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Como usar agentes do Amazon Bedrock para automatizar a criação de controles de entrada de acesso no Amazon EKS por meio de prompts baseados em texto](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)