

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

# Computação
<a name="compute-pattern-list"></a>

**Topics**
+ [Contêineres e microsserviços](containersandmicroservices-pattern-list.md)
+ [Sem servidor](serverless-pattern-list.md)
+ [Redes](networking-pattern-list.md)
+ [Entrega de conteúdo](contentdelivery-pattern-list.md)

# Contêineres e microsserviços
<a name="containersandmicroservices-pattern-list"></a>

**Topics**
+ [Acesse um banco de dados Amazon Neptune a partir de um contêiner Amazon EKS](access-amazon-neptune-database-from-amazon-eks-container.md)
+ [Acesse aplicativos de contêineres de forma privada no Amazon ECS usando a AWS PrivateLink e um Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Acesse aplicativos de contêineres de forma privada no Amazon ECS usando o AWS Fargate, a PrivateLink AWS e um Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [Acesse aplicativos de contêineres de forma privada no Amazon EKS usando a AWS PrivateLink e um Network Load Balancer](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Automatize backups para instâncias de banco de dados do Amazon RDS para PostgreSQL usando o AWS Batch](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [Automatize a implantação do Node Termination Handler no Amazon EKS usando um pipeline CI/CD](automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.md)
+ [Crie e implante automaticamente um aplicativo Java no Amazon EKS usando um CI/CD pipeline](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [Copie imagens de contêineres do Amazon ECR entre e Contas da AWS Regiões da AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Crie uma definição de tarefa do Amazon ECS e monte um sistema de arquivos em EC2 instâncias usando o Amazon EFS](create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.md)
+ [Implantar funções do Lambda com imagens de contêiner](deploy-lambda-functions-with-container-images.md)
+ [Implante microsserviços Java no Amazon ECS usando o AWS Fargate](deploy-java-microservices-on-amazon-ecs-using-aws-fargate.md)
+ [Implante recursos e pacotes do Kubernetes usando o Amazon EKS e um repositório de charts do Helm no Amazon S3](deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3.md)
+ [Implemente um cluster CockroachDB no Amazon EKS usando o Terraform](deploy-cockroachdb-on-eks-using-terraform.md)
+ [Implante um exemplo de microsserviço Java no Amazon EKS e exponha o microsserviço usando um Application Load Balancer](deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.md)
+ [Implemente um aplicativo baseado em gRPC em um cluster Amazon EKS e acesse-o com um Application Load Balancer](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.md)
+ [Implante aplicativos em contêineres em AWS IoT Greengrass V2 execução como um contêiner Docker](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)
+ [Implantar contêineres usando o Elastic Beanstalk](deploy-containers-by-using-elastic-beanstalk.md)
+ [Gere um endereço IP de saída estático usando uma função do Lambda, Amazon VPC e uma arquitetura de tecnologia sem servidor](generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.md)
+ [Identificação automática de imagens de contêineres duplicadas ao migrar para um repositório do Amazon ECR](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [Instale o agente SSM nos nós de trabalho do Amazon EKS usando o Kubernetes DaemonSet](install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset.md)
+ [Instale o agente SSM e o CloudWatch agente nos nós de trabalho do Amazon EKS usando preBootstrapCommands](install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.md)
+ [Migração dos NGINX Ingress Controllers ao habilitar o Modo Automático do Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.md)
+ [Migre suas cargas de trabalho de contêiner do Azure Red Hat OpenShift (ARO) para Serviço Red Hat OpenShift na AWS (ROSA)](migrate-container-workloads-from-aro-to-rosa.md)
+ [Execute tarefas do Amazon ECS na Amazon WorkSpaces com o Amazon ECS Anywhere](run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.md)
+ [Execute um contêiner Docker da API web ASP.NET Core em uma instância Amazon Linux EC2](run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.md)
+ [Executar workloads monitoradas com armazenamento de dados persistente usando o Amazon EFS no Amazon EKS com o AWS Fargate](run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.md)
+ [Configuração do ajuste de escala automático orientado por eventos no Amazon EKS usando o Identidade de Pods do Amazon EKS e o KEDA](event-driven-auto-scaling-with-eks-pod-identity-and-keda.md)
+ [Implantações simplificadas do PostgreSQL no Amazon EKS usando o PGO](streamline-postgresql-deployments-amazon-eks-pgo.md)
+ [Autenticação simplificada de aplicações com TLS mútua no Amazon ECS usando o Application Load Balancer](simplify-application-authentication-with-mutual-tls-in-amazon-ecs.md)
+ [Mais padrões](containersandmicroservices-more-patterns-pattern-list.md)

# Acesse um banco de dados Amazon Neptune a partir de um contêiner Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

## Resumo
<a name="access-amazon-neptune-database-from-amazon-eks-container-summary"></a>

Esse padrão estabelece uma conexão entre o Amazon Neptune, que é um banco de dados gráfico totalmente gerenciado, e o Amazon Elastic Kubernetes Service (Amazon EKS), um serviço de orquestração de contêineres, para acessar um banco de dados Neptune. Os clusters de banco de dados Neptune estão confinados em uma nuvem privada virtual (VPC) ativada. AWS Por esse motivo, acessar o Neptune exige uma configuração cuidadosa da VPC para permitir a conectividade.

Ao contrário do Amazon Relational Database Service (Amazon RDS) para PostgreSQL, o Neptune não depende de credenciais típicas de acesso ao banco de dados. Em vez disso, ele usa funções AWS Identity and Access Management (IAM) para autenticação. Portanto, conectar-se ao Neptune a partir do Amazon EKS envolve a configuração de uma função do IAM com as permissões necessárias para acessar o Neptune.

Além disso, os endpoints do Neptune são acessíveis somente na VPC em que o cluster reside. Isso significa que você precisa definir as configurações de rede para facilitar a comunicação entre o Amazon EKS e o Neptune. Dependendo de seus requisitos específicos e preferências de rede, existem [várias abordagens para configurar a VPC para permitir uma conectividade perfeita entre o](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) Neptune e o Amazon EKS. Cada método oferece vantagens e considerações distintas, que fornecem flexibilidade na criação da arquitetura do banco de dados para atender às necessidades do seu aplicativo.

## Pré-requisitos e limitações
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Pré-requisitos **
+ Instale a versão mais recente do **kubectl** (veja [as instruções](https://kubernetes.io/docs/tasks/tools/#kubectl)). Para verificar sua versão, execute: 

  ```
  kubectl version --short
  ```
+ Instale a versão mais recente do **eksctl** (veja [as instruções](https://eksctl.io/installation/)). Para verificar sua versão, execute: 

  ```
  eksctl info
  ```
+ Instale a versão mais recente da AWS Command Line Interface (AWS CLI) versão 2 (consulte [as instruções](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Para verificar sua versão, execute: 

  ```
  aws --version
  ```
+ [Crie um cluster de banco de dados Neptune (consulte as instruções).](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html) Certifique-se de estabelecer comunicações entre a VPC do cluster e o Amazon EKS por meio de [emparelhamento de VPC](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) ou outro método. [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html) Verifique também se o status do cluster está “disponível” e se ele tem uma regra de entrada na porta 8182 para o grupo de segurança.
+ [Configure um provedor IAM OpenID Connect (OIDC) em um cluster Amazon EKS existente (consulte as instruções).](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)

**Versões do produto**
+ [Amazon EKS 1.27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Motor Amazon Neptune versão 1.3.0.0 (2023-11-15)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

## Arquitetura
<a name="access-amazon-neptune-database-from-amazon-eks-container-architecture"></a>

O diagrama a seguir mostra a conexão entre os pods do Kubernetes em um cluster do Amazon EKS e o Neptune para fornecer acesso a um banco de dados do Neptune.

![\[Conectando pods em um nó do Kubernetes com o Amazon Neptune.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Automação e escala**

Você pode usar o Amazon EKS [Horizontal Pod Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) para escalar essa solução.

## Ferramentas
<a name="access-amazon-neptune-database-from-amazon-eks-container-tools"></a>

**Serviços**
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ [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 Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) é um serviço de banco de dados gráfico que ajuda você a criar e executar aplicativos que funcionam com conjuntos de dados altamente conectados.

## Práticas recomendadas
<a name="access-amazon-neptune-database-from-amazon-eks-container-best-practices"></a>

Para obter as melhores práticas, consulte [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) nos *guias de melhores práticas do Amazon EKS*.

## Épicos
<a name="access-amazon-neptune-database-from-amazon-eks-container-epics"></a>

### Definição de variáveis de ambiente
<a name="set-environment-variables"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique o contexto do cluster. | Antes de interagir com seu cluster Amazon EKS usando o Helm ou outras ferramentas de linha de comando, você deve definir variáveis de ambiente que encapsulem os detalhes do seu cluster. Essas variáveis são usadas em comandos subsequentes para garantir que elas tenham como alvo o cluster e os recursos corretos.Primeiro, confirme se você está operando no contexto correto do cluster. Isso garante que todos os comandos subsequentes sejam enviados para o cluster Kubernetes pretendido. Para verificar o contexto atual, execute o comando a seguir.<pre>kubectl config current-context</pre> | Administrador da AWS, administrador de nuvem | 
| Defina a `CLUSTER_NAME` variável. | Defina a variável de `CLUSTER_NAME` ambiente para seu cluster Amazon EKS. No comando a seguir, substitua o valor `us-west-2` da amostra pelo correto Região da AWS para seu cluster. Substitua o valor `eks-workshop` da amostra pelo nome do cluster existente.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Administrador da AWS, administrador de nuvem | 
| Valide a saída. | Para validar se as variáveis foram definidas corretamente, execute o comando a seguir.<pre>echo $CLUSTER_NAME</pre>Verifique se a saída desse comando corresponde à entrada especificada na etapa anterior. | Administrador da AWS, administrador de nuvem | 

### Crie uma função do IAM e associe-a ao Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar uma conta de serviço do . | Você usa [funções do IAM para contas de serviço para mapear suas contas](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) de serviço do Kubernetes para funções do IAM, a fim de permitir o gerenciamento refinado de permissões para seus aplicativos que são executados no Amazon EKS. Você pode usar [eksctl](https://eksctl.io/) para criar e associar uma função do IAM a uma conta de serviço específica do Kubernetes em seu cluster Amazon EKS. A política AWS gerenciada `NeptuneFullAccess` permite acesso de gravação e leitura ao cluster Neptune especificado.Você deve ter um [endpoint OIDC](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) associado ao seu cluster antes de executar esses comandos.Crie uma conta de serviço que você deseja associar a uma política AWS gerenciada chamada`NeptuneFullAccess`.<pre>eksctl create iamserviceaccount --name eks-neptune-sa --namespace default --cluster $CLUSTER_NAME --attach-policy-arn arn:aws:iam::aws:policy/NeptuneFullAccess --approve --override-existing-serviceaccounts</pre>onde `eks-neptune-sa ` está o nome da conta de serviço que você deseja criar.Após a conclusão, esse comando exibe a seguinte resposta:<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Administrador da AWS, administrador de nuvem | 
| Verifique se a conta está configurada corretamente. | Certifique-se de que a conta `eks-neptune-sa` de serviço esteja configurada corretamente no namespace padrão do seu cluster.<pre>kubectl get sa eks-neptune-sa -o yaml</pre>O resultado deve ser semelhante ao seguinte:<pre>apiVersion: v1<br />kind: ServiceAccount<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/eksctl-eks-workshop-addon-iamserviceaccount-d-Role1-Q35yKgdQOlmM<br />  creationTimestamp: "2024-02-07T01:12:39Z"<br />  labels:<br />    app.kubernetes.io/managed-by: eksctl<br />  name: eks-neptune-sa<br />  namespace: default<br />  resourceVersion: "5174750"<br />  uid: cd6ba2f7-a0f5-40e1-a6f4-4081e0042316</pre> | Administrador da AWS, administrador de nuvem | 
| Verifique a conectividade. | Implante um pod de amostra chamado `pod-util` e verifique a conectividade com o Neptune.<pre>apiVersion: v1<br />kind: Pod<br />metadata:<br />  name: pod-util<br />  namespace: default<br />spec:<br />  serviceAccountName: eks-neptune-sa<br />  containers:<br />  - name: pod-util<br />    image: public.ecr.aws/patrickc/troubleshoot-util<br />    command:<br />      - sleep<br />      - "3600"<br />    imagePullPolicy: IfNotPresent</pre><pre>kubectl apply -f pod-util.yaml</pre><pre>kubectl exec --stdin --tty pod-util -- /bin/bash<br />bash-5.1# curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/gremlin<br />{"requestId":"a4964f2d-12b1-4ed3-8a14-eff511431a0e","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[]},"meta":{"@type":"g:Map","@value":[]}}}<br />bash-5.1# exit<br />exit</pre> | Administrador da AWS, administrador de nuvem | 

### Validar a atividade de conexão
<a name="validate-connection-activity"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Habilite a autenticação do banco de dados do IAM. | Por padrão, a autenticação de banco de dados do IAM está desabilitada quando você cria um cluster de banco de dados do Neptune. Você pode ativar ou desativar a autenticação do banco de dados do IAM usando Console de gerenciamento da AWS o.Siga as etapas na AWS documentação para [habilitar a autenticação do banco de dados do IAM no Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Administrador da AWS, administrador de nuvem | 
| Verifique as conexões. | Nesta etapa, você interage com o `pod-util` contêiner, que já está em execução, para instalar o **awscurl** e verificar a conexão.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Administrador da AWS, administrador de nuvem | 

## Solução de problemas
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Não consigo acessar o banco de dados Neptune. | Analise a política do IAM que está anexada à conta de serviço. Certifique-se de que ele permita as ações necessárias (por exemplo,`neptune:Connec,neptune:DescribeDBInstances`) para as operações que você deseja executar. | 

## Recursos relacionados
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Conceda às cargas de trabalho do Kubernetes acesso ao AWS uso de contas de serviço do Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (documentação do Amazon EKS)
+ [Funções do IAM para contas de serviço](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (documentação do Amazon EKS)
+ [Criação de um novo cluster de banco de dados Neptune (documentação](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html) do Amazon Neptune)

# Acesse aplicativos de contêineres de forma privada no Amazon ECS usando a AWS PrivateLink e um Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumo
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Esse padrão descreve como hospedar de forma privada um aplicativo de contêiner Docker no Amazon Elastic Container Service (Amazon ECS) por trás de um Network Load Balancer e acessar o aplicativo usando a AWS. PrivateLink Você pode usar uma rede privada para acessar, de forma segura, serviços na Nuvem do Amazon Web Services (AWS). O Amazon Relational Database Service (Amazon RDS) hospeda os banco de dados relacional para o aplicativo em execução no Amazon ECS com alta disponibilidade (HA). O Amazon Elastic File System (Amazon EFS) é usado se o aplicativo exigir armazenamento persistente.

O serviço Amazon ECS que executa os aplicativos Docker, com um Network Load Balancer no front-end, pode ser associado a um endpoint de nuvem privada virtual (VPC) para acesso por meio da AWS. PrivateLink Esse serviço de VPC endpoint pode então ser compartilhado com outras pessoas VPCs usando seus VPC endpoints.

Você também pode usar o [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) em vez de um grupo do Amazon Auto EC2 Scaling. Para obter mais informações, consulte [Acesse aplicativos de contêineres de forma privada no Amazon ECS usando o AWS Fargate, a PrivateLink AWS e um Network Load Balancer](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html?did=pg_card).

## Pré-requisitos e limitações
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ [AWS Command Line Interface (AWS CLI) versão 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), instalado e configurado no Linux, macOS ou Windows
+ [Docker](https://www.docker.com/), instalado e configurado no Linux, macOS ou Windows
+ Um aplicativo em execução no Docker

## Arquitetura
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Usando PrivateLink a AWS para acessar um aplicativo de contêiner no Amazon ECS por trás de um Network Load Balancer.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a316bf46-24db-4514-957d-abc60f8f6962/images/573951ed-74bb-4023-9d9c-43e77e4f8eda.png)


 

**Pilha de tecnologia**
+ Amazon CloudWatch
+ Nuvem de computação elástica da Amazon (Amazon EC2)
+ Amazon EC2 Auto Scaling
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Lambda
+ AWS PrivateLink
+ AWS Secrets Manager
+ Application Load Balancer
+ Network Load Balancer
+ VPC

*Automação e escala*
+ Você pode usar CloudFormation a [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) para criar esse padrão usando a [infraestrutura como código](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Ferramentas
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) — A Amazon Elastic Compute Cloud (Amazon EC2) fornece capacidade de computação escalável na Nuvem AWS.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) — O Amazon EC2 Auto Scaling ajuda você a garantir que você tenha o número correto de instâncias da EC2 Amazon disponíveis para lidar com a carga do seu aplicativo.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html): o Amazon Elastic Container Service (Amazon ECS) é um serviço de gerenciamento de contêineres altamente escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster.
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html): o Amazon Elastic Container Registry (Amazon ECR) é um serviço de registro de imagem de contêiner, seguro, escalável e confiável.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html): o Amazon Elastic File System (Amazon EFS) fornece um sistema de arquivos NFS elástico simples, escalável, totalmente gerenciável e pronto para uso com serviços de Nuvem AWS e atributos on-premises.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): o AWS Lambda é um serviço de computação com tecnologia para executar código sem provisionamento ou gerenciamento de servidores.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/): o Amazon Relational Database Service (Amazon RDS) é um serviço Web que facilita a configuração, a operação e escalabilidade de um banco de dados relacional na Nuvem AWS.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html): o Amazon Simple Storage Service (Amazon S3) serve como armazenamento para a internet. Ele foi projetado para facilitar a computação de escala na web para os desenvolvedores.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html): o Secrets Manager permite a substituição de credenciais codificadas no seu código, incluindo senhas, e oferece uma chamada de API para o Secrets Manager para recuperar o segredo de forma programática.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html): o Amazon Virtual Private Cloud (Amazon VPC) ajuda a iniciar recursos da AWS em uma rede virtual definida por você.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) — O Elastic Load Balancing distribui o tráfego de entrada de aplicativos ou de rede em vários destinos, como instâncias, contêineres e endereços IP EC2 da Amazon, em várias zonas de disponibilidade.
+ [Docker](https://www.docker.com/): o Docker ajuda os desenvolvedores a empacotar, enviar e executar qualquer aplicativo como um contêiner leve, portátil e autossuficiente.

## Épicos
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Criar componentes de rede
<a name="create-networking-components"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Criar os balanceadores de carga
<a name="create-the-load-balancers"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Criar um Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Criar um sistema de arquivos do Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um sistema de arquivos do Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Monte destinos para as sub-redes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Verifique se as sub-redes estão montadas como destinos.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Criar um bucket do S3.
<a name="create-an-s3-bucket"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um bucket do S3.  | Abra o console do Amazon S3 e crie um bucket do S3 para armazenar os ativos estáticos do seu aplicativo, se necessário. | Administrador de nuvem | 

### Crie um segredo do Secrets Manager
<a name="create-a-secrets-manager-secret"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma chave do AWS KMS para criptografar o segredo do Secrets Manager. | Abra o console do AWS Key Management Service (AWS KMS) e crie uma chave do KMS. | Administrador de nuvem | 
|  Crie um segredo do Secrets Manager para armazenar a senha do Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem  | 

### Criar uma instância de do Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um grupo de sub-redes de banco de dados.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Crie uma instância de do Amazon RDS. | Crie e configure uma instância do Amazon RDS nas sub-redes privadas. Certifique-se de que o **Multi-AZ** esteja ativado para HA. | Administrador de nuvem | 
| Carregue dados na instância do Amazon RDS.  | Carregue os dados relacionais exigidos pelo seu aplicativo na sua instância do Amazon RDS. Esse processo irá variar dependendo das necessidades do seu aplicativo, bem como de como o esquema do banco de dados é definido e projetado. | Administrador de nuvem, DBA | 

### Criar os componentes do Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um cluster do ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Criar as imagens do Docker.  | Crie as imagens do Docker seguindo as instruções na seção *Recursos relacionados*. | Administrador de nuvem | 
| Crie repositórios do Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem, DevOps engenheiro | 
| Autentique seu cliente do Docker no repositório do Amazon ECR.  | Para autenticar seu cliente Docker para o repositório do Amazon ECR, execute o comando “`aws ecr get-login-password` na CLI da AWS. | Administrador de nuvem | 
| Envie imagens do Docker ao repositório do Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Criar uma definição de tarefa do Amazon ECS.  | É necessária uma definição de tarefa para executar contêineres do Docker no Amazon ECS. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Para obter ajuda na configuração da definição de tarefa, consulte “Criação de uma definição de tarefa” na seção *Recursos relacionados*. Certifique-se de fornecer as imagens do Docker que você enviou para o Amazon ECR. | Administrador de nuvem | 
| Crie um serviço do Amazon ECS.  | Crie um serviço do Amazon ECS usando o cluster ECS que você criou anteriormente. Certifique-se de escolher Amazon EC2 como o tipo de lançamento e escolher a definição de tarefa criada na etapa anterior, bem como o grupo-alvo do Application Load Balancer. | Administrador de nuvem | 

### Crie um grupo Amazon EC2 Auto Scaling
<a name="create-an-amazon-ec2-auto-scaling-group"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma configuração de ativação. | Abra o EC2 console da Amazon e crie uma configuração de lançamento. Certifique-se de que os dados do usuário tenham o código para permitir que as EC2 instâncias se juntem ao cluster ECS desejado. Para ver um exemplo do código necessário, consulte a seção *Recursos relacionados*. | Administrador de nuvem | 
| Crie um grupo do Amazon EC2 Auto Scaling.  | Volte para o EC2 console da Amazon e, em **Auto Scaling**, escolha grupos de **Auto Scaling**. Configure um grupo do Amazon EC2 Auto Scaling. Certifique-se de escolher as sub-redes privadas e a configuração de inicialização que você criou anteriormente. | Administrador de nuvem | 

### Configurar a AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o PrivateLink endpoint da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Para obter mais informações, consulte a seção *Recursos relacionados*. | Administrador de nuvem | 

### Criar um VPC endpoint
<a name="create-a-vpc-endpoint"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um VPC endpoint | Crie um VPC endpoint para o endpoint da AWS que PrivateLink você criou anteriormente. O nome de domínio totalmente qualificado (FQDN) do VPC endpoint apontará para o FQDN do endpoint da AWS. PrivateLink Isso cria uma interface de rede elástica para o serviço de endpoint da VPC que os endpoints de DNS podem acessar. | Administrador de nuvem | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar a função do Lambda. | No console do AWS Lambda, crie uma função do Lambda para atualizar os endereços IP do Application Load Balancer como destinos para o Network Load Balancer. Para obter mais informações sobre isso, consulte a publicação no blog [Using AWS Lambda to enable static IP addresses for Application Load Balancers](https://aws.amazon.com/blogs/networking-and-content-delivery/using-aws-lambda-to-enable-static-ip-addresses-for-application-load-balancers/). | Desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Criar os balanceadores de carga:**
+ [Use um Network Load Balancer para o Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Criar um Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Use um Application Load Balancer para o Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Criar um Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Criar um sistema de arquivos do Amazon EFS**
+ [Criar um sistema de arquivos do Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Crie destinos de montagem no Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Criar um bucket do S3**
+ [Criar um bucket do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)

**Criar um segredo do Secrets Manager:**
+ [Crie chaves no AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Criar um segredo no AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

**Criar uma instância de do Amazon RDS:**
+ [Criar uma instância de banco de dados do Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Criar os componentes do Amazon ECS:**
+ [Criar um cluster do Amazon ECS ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-ec2-cluster-console-v2.html)
+ [Criar uma imagem do Docker](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Criar um repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Autentique o Docker com o repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Enviar uma imagem para um repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Criar uma definição de tarefa do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Criar um serviço do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Crie um grupo do Amazon EC2 Auto Scaling:**
+ [Criar uma configuração de execução](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html)
+ [Criar um grupo do Auto Scaling usando uma configuração de execução](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg.html)
+ [Instâncias de contêiner bootstrap com dados de EC2 usuários da Amazon](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html)

**Configure a AWS PrivateLink:**
+ [Serviços de endpoint de VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)

**Criar um endpoint da VPC:**
+ [Interface de endpoints VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)

**Criar a função do Lambda:**
+ [Criar uma função do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)

**Outros recursos:**
+ [Usando endereços IP estáticos para Application Load Balancers](https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/)
+ [Acessando serviços com segurança pela AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Acesse aplicativos de contêineres de forma privada no Amazon ECS usando o AWS Fargate, a PrivateLink AWS e um Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumo
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-summary"></a>

Esse padrão descreve como hospedar de forma privada um aplicativo de contêiner Docker na nuvem da Amazon Web Services (AWS) usando o Amazon Elastic Container Service (Amazon ECS) com um tipo de lançamento do AWS Fargate, atrás de um Network Load Balancer, e acessar o aplicativo usando a AWS. PrivateLink O Amazon Relational Database Service (Amazon RDS) hospeda os banco de dados relacional para o aplicativo em execução no Amazon ECS com alta disponibilidade (HA). Você pode usar o Amazon Elastic File System (Amazon EFS) se o aplicativo exigir armazenamento persistente.

Esse padrão usa um [tipo de lançamento Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/launch_types.html) para o serviço do Amazon ECS executando os aplicativos Docker, com um Network Load Balancer no frontend. Em seguida, ele pode ser associado a um endpoint de nuvem privada virtual (VPC) para acesso por meio da AWS. PrivateLink Esse serviço de VPC endpoint pode então ser compartilhado com outras pessoas VPCs usando seus VPC endpoints.

Você pode usar o Fargate com o Amazon ECS para executar contêineres sem precisar gerenciar servidores ou clusters de instâncias do Amazon Elastic Compute Cloud (Amazon). EC2 Você também pode usar um grupo do Amazon EC2 Auto Scaling em vez do Fargate. Para obter mais informações, consulte [Acesse aplicativos de contêineres de forma privada no Amazon ECS usando a AWS PrivateLink e um Network](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html?did=pg_card&trk=pg_card) Load Balancer.

## Pré-requisitos e limitações
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ [AWS Command Line Interface (AWS CLI) versão 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), instalado e configurado no Linux, macOS ou Windows
+ [Docker](https://www.docker.com/), instalado e configurado no Linux, macOS ou Windows
+ Um aplicativo em execução no Docker

## Arquitetura
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Usando PrivateLink para acessar um aplicativo de contêiner no Amazon ECS com um tipo de lançamento do AWS Fargate.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/31cca5e2-8d8b-45ec-b872-a06b0dd97007/images/57cc9995-45f4-4039-a0bf-2d2b3d6a05de.png)


**Pilha de tecnologia**
+ Amazon CloudWatch
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon EFS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Fargate
+ AWS PrivateLink
+ AWS Secrets Manager
+ Application Load Balancer
+ Network Load Balancer
+ VPC

**Automação e escala**
+ Você pode usar CloudFormation a [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) para criar esse padrão usando a [infraestrutura como código](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Ferramentas
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-tools"></a>

**Serviços da AWS**
+ [O Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) é um serviço gerenciado de registro de imagens de contêineres da AWS que é seguro, escalável e confiável.
+ [O Amazon Elastic Container Service (Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)) é um serviço de gerenciamento de contêineres altamente escalável e rápido que facilita a execução, a parada e o gerenciamento de contêineres em um cluster.
+ [O Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) fornece um sistema de arquivos NFS elástico simples, escalável e totalmente gerenciado para uso com serviços de nuvem e recursos locais da AWS.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)é uma tecnologia que você pode usar com o Amazon ECS para executar contêineres sem precisar gerenciar servidores ou clusters de EC2 instâncias da Amazon.
+ O [Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/rds/index.html) é um serviço da web que facilita a configuração, a operação e a escalabilidade de um banco de dados relacional na Nuvem AWS.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento para a internet. Ele foi projetado para facilitar a computação de escala na web para os desenvolvedores.
+ O [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/) ajuda a substituir credenciais codificadas, incluindo senhas, por uma chamada de API ao Secrets Manager para recuperar o segredo por programação.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar recursos da AWS em uma rede virtual que você definiu.
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos, como EC2 instâncias, contêineres e endereços IP, em várias zonas de disponibilidade.

**Outras ferramentas**
+ O [Docker](https://www.docker.com/) ajuda os desenvolvedores a empacotar, enviar e executar facilmente qualquer aplicativo como um contêiner leve, portátil e autossuficiente.

## Épicos
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Criar componentes de rede
<a name="create-networking-components"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Criar os balanceadores de carga
<a name="create-the-load-balancers"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Para obter ajuda com esse e outros artigos, consulte a seção *Recursos relacionados*. | Administrador de nuvem | 
| Criar um Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Criar um sistema de arquivos do Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um sistema de arquivos do Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Monte destinos para as sub-redes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Verifique se as sub-redes estão montadas como destinos.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Criar um bucket do S3.
<a name="create-an-s3-bucket"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um bucket do S3. | Abra o console do Amazon S3 e [crie um bucket do S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket) para armazenar os ativos estáticos do seu aplicativo, se necessário. | Administrador de nuvem | 

### Crie um segredo do Secrets Manager
<a name="create-a-secrets-manager-secret"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Crie uma chave do AWS KMS para criptografar o segredo do Secrets Manager. | Abra o console do AWS Key Management Service (AWS KMS) e crie uma chave do KMS. | Administrador de nuvem | 
|  Crie um segredo do Secrets Manager para armazenar a senha do Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Criar uma instância de do Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um grupo de sub-redes de banco de dados.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Crie uma instância de do Amazon RDS. | Crie e configure uma instância do Amazon RDS nas sub-redes privadas. Certifique-se de que o **Multi-AZ** esteja ativado para alta disponibilidade (HA). | Administrador de nuvem | 
| Carregue dados na instância do Amazon RDS.  | Carregue os dados relacionais exigidos pelo seu aplicativo na sua instância do Amazon RDS. Esse processo irá variar dependendo das necessidades do seu aplicativo, bem como de como o esquema do banco de dados é definido e projetado. | DBA | 

### Criar os componentes do Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um cluster do ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Criar as imagens do Docker. | Crie as imagens do Docker seguindo as instruções na [AWS documentação](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html). | Administrador de nuvem | 
| Crie um repositório do Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem, DevOps engenheiro | 
| Envie imagens do Docker ao repositório do Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 
| Criar uma definição de tarefa do Amazon ECS.  | É necessária uma definição de tarefa para executar contêineres do Docker no Amazon ECS. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Para obter ajuda na configuração da definição de tarefa, consulte “Criação de uma definição de tarefa” na seção *Recursos relacionados*. Certifique-se de fornecer as imagens do Docker que você enviou para o Amazon ECR. | Administrador de nuvem | 
| Crie um serviço do ECS e escolha Fargate como o tipo de lançamento. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Configurar a AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o PrivateLink endpoint da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrador de nuvem | 

### Criar um VPC endpoint
<a name="create-a-vpc-endpoint"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um VPC endpoint | [Crie um VPC endpoint para o endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) da AWS que PrivateLink você criou anteriormente. O nome de domínio totalmente qualificado (FQDN) do VPC endpoint apontará para o FQDN do endpoint da AWS. PrivateLink Isso cria uma interface de rede elástica para o serviço de endpoint da VPC que os endpoints do Domain Name Service podem acessar. | Administrador de nuvem | 

### Defina o alvo
<a name="set-the-target"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione o Application Load Balancer como destino. | [Para adicionar o Application Load Balancer como destino para o Network Load Balancer, siga as instruções na documentação.AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/application-load-balancer-target.html) | Desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Criar os balanceadores de carga:**
+ [Use um Network Load Balancer para o Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Criar um Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Use um Application Load Balancer para o Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Criar um Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Criar um sistema de arquivos do Amazon EFS**
+ [Criar um sistema de arquivos do Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Crie destinos de montagem no Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Criar um segredo do Secrets Manager:**
+ [Crie chaves no AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Criar um segredo no AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)

**Criar uma instância de do Amazon RDS:**
+ [Criar uma instância de banco de dados do Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Criar os componentes do Amazon ECS**
+ [Criar um repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Autentique o Docker com o repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Enviar uma imagem para um repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Criar uma definição de tarefa do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Criar um serviço do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Outros recursos:**
+ [Acessando serviços com segurança pela AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Acesse aplicativos de contêineres de forma privada no Amazon EKS usando a AWS PrivateLink e um Network Load Balancer
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumo
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Esse padrão descreve como hospedar de forma privada um aplicativo de contêiner Docker no Amazon Elastic Kubernetes Service (Amazon EKS) por trás de um Network Load Balancer e acessar o aplicativo usando a AWS. PrivateLink Você pode usar uma rede privada para acessar, de forma segura, serviços na Nuvem do Amazon Web Services (AWS). 

O cluster Amazon EKS que executa os aplicativos Docker, com um Network Load Balancer no front-end, pode ser associado a um endpoint de nuvem privada virtual (VPC) para acesso por meio da AWS. PrivateLink Esse serviço de VPC endpoint pode então ser compartilhado com outras pessoas VPCs usando seus VPC endpoints.

A configuração descrita por esse padrão é uma forma segura de compartilhar o acesso ao aplicativo VPCs entre contas da AWS. Não requer configurações especiais de conectividade ou roteamento, porque a conexão entre as contas do consumidor e do provedor faz parte da espinha dorsal global da AWS e não atravessa a Internet pública.

## Pré-requisitos e limitações
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Pré-requisitos **
+ [Docker](https://www.docker.com/), instalado e configurado em macOS, Linux ou Windows.
+ Um aplicativo em execução no Docker.
+ Uma conta AWS ativa
+ [AWS Command Line Interface (AWS CLI) versão 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), instalado e configurado no Linux, macOS ou Windows.
+ Um cluster Amazon EKS existente com sub-redes privadas marcadas e configurado para hospedar aplicativos. Para obter mais informações, consulte [Marcação de sub-rede](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#vpc-subnet-tagging) na documentação do Amazon EKS. 
+ Kubectl, instalado e configurado para acessar recursos em seu cluster Amazon EKS. Para obter mais informações, consulte [Instalação do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS. 

## Arquitetura
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Use PrivateLink um Network Load Balancer para acessar um aplicativo em um contêiner Amazon EKS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/ce977924-012c-4fb6-8e51-94d6e5c829a6/images/378456a3-f4d1-4a57-bb36-879c240cabfb.png)


**Pilha de tecnologia**
+ Amazon EKS
+ AWS PrivateLink
+ Network Load Balancer

**Automação e escala**
+ Os manifestos do Kubernetes podem ser rastreados e gerenciados em um repositório baseado em Git e implantados usando integração contínua e entrega contínua (CI/CD) na AWS. CodePipeline 
+ Você pode usar CloudFormation a AWS para criar esse padrão usando infraestrutura como código (IaC).

## Ferramentas
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): o AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) — O Elastic Load Balancing distribui o tráfego de entrada de aplicativos ou de rede em vários destinos, como instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud ( EC2Amazon), em uma ou mais zonas de disponibilidade.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html): o Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço gerenciado que você pode usar para executar o Kubernetes na AWS, eliminando a necessidade de instalar, operar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html): o Amazon Virtual Private Cloud (Amazon VPC) ajuda a iniciar recursos da AWS em uma rede virtual definida por você.
+ [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): o Kubectl é um utilitário de linha de comando para executar comandos em clusters Kubernetes.

## Épicos
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Implante os arquivos de manifesto de implantação e serviço do Kubernetes
<a name="deploy-the-kubernetes-deployment-and-service-manifest-files"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Crie o arquivo de manifesto de implantação do Kubernetes. | Crie um arquivo de manifesto de implantação modificando o arquivo de exemplo a seguir de acordo com seus requisitos.<pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: sample-app<br />spec:<br />  replicas: 3<br />  selector:<br />    matchLabels:<br />      app: nginx<br />  template:<br />    metadata:<br />      labels:<br />        app: nginx<br />    spec:<br />      containers:<br />        - name: nginx<br />          image: public.ecr.aws/z9d2n7e1/nginx:1.19.5<br />          ports:<br />            - name: http<br />              containerPort: 80</pre>Esse é um exemplo de arquivo de configuração do NGINX que é implantado usando a imagem do Docker do NGINX. Para obter mais informações, consulte [Como usar a imagem oficial do Docker do NGINX na documentação do Docker](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/). | DevOps engenheiro | 
| Implante o arquivo de manifesto de implantação do Kubernetes. | Execute o seguinte comando para aplicar o arquivo do manifesto de implantação ao cluster do Amazon EKS:`kubectl apply –f <your_deployment_file_name> ` | DevOps engenheiro | 
|  Crie o arquivo do manifesto do serviço do Kubernetes.  | Crie um serviço de manifesto de serviço modificando o arquivo de exemplo a seguir de acordo com seus requisitos.<pre>apiVersion: v1<br />kind: Service<br />metadata:<br />  name: sample-service<br />  annotations:<br />    service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />    service.beta.kubernetes.io/aws-load-balancer-internal: "true"<br />spec:<br />  ports:<br />    - port: 80<br />      targetPort: 80<br />      protocol: TCP<br />  type: LoadBalancer<br />  selector:<br />    app: nginx</pre>Certifique-se de incluir o seguinte `annotations` para definir um Network Load Balancer interno:<pre>service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />service.beta.kubernetes.io/aws-load-balancer-internal: "true"</pre> | DevOps engenheiro | 
| Implante o arquivo de manifesto do serviço Kubernetes. | Execute o seguinte comando para aplicar o arquivo de manifesto do serviço ao cluster do Amazon EKS:`kubectl apply -f <your_service_file_name>` | DevOps engenheiro | 

### Criar os endpoints
<a name="create-the-endpoints"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Registre o nome do Network Load Balancer.  | Execute o comando a seguir para recuperar o nome do Network Load Balancer:`kubectl get svc sample-service -o wide`Registre o nome do Network Load Balancer, que é necessário para criar um PrivateLink endpoint da AWS. | DevOps engenheiro | 
| Crie um PrivateLink endpoint da AWS. | Faça login no AWS Management Console, abra o console da Amazon VPC e crie um endpoint da AWS PrivateLink . Associe esse endpoint ao Network Load Balancer, isso torna o aplicativo disponível de forma privada para os clientes. Para obter mais informações, consulte [VPC endpoint services (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) na documentação da Amazon VPC.Se a conta do consumidor exigir acesso ao aplicativo, o [ID da conta da AWS da conta](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html) do consumidor deverá ser adicionado à lista de diretores permitidos para a configuração do PrivateLink endpoint da AWS. Para obter mais informações, consulte [Adicionar e remover permissões para o serviço de endpoint](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html) na documentação da Amazon VPC. | Administrador de nuvem  | 
| Crie um VPC endpoint | No console da Amazon VPC, escolha **Serviços de endpoint** e escolha **Criar o serviço de endpoint**. Crie um endpoint VPC para o endpoint da AWS. PrivateLink O nome de domínio totalmente qualificado (FQDN) do VPC endpoint aponta para o FQDN do endpoint da AWS. PrivateLink Isso cria uma interface de rede elástica para o serviço de endpoint da VPC que os endpoints de DNS podem acessar.  | Administrador de nuvem | 

## Recursos relacionados
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-resources"></a>
+ [Usar a imagem do Docker oficial NGINX](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/) 
+ [Network Load Balancer no Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html) 
+ [Criação de serviços de endpoint VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) 
+ [Adicionar e remover permissões para o serviço de endpoint ](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html)

# Automatize backups para instâncias de banco de dados do Amazon RDS para PostgreSQL usando o AWS Batch
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Resumo
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-summary"></a>

Fazer backup de seus bancos de dados PostgreSQL é uma tarefa importante e normalmente pode ser concluído com o [utilitário pg\$1dump](https://www.postgresql.org/docs/current/app-pgdump.html), que usa o comando COPIAR por padrão para criar um esquema e uma despejo de dados de um banco de dados PostgreSQL. No entanto, esse processo pode se tornar repetitivo se você precisar de backups regulares para vários bancos de dados PostgreSQL. Se seus bancos de dados PostgreSQL estiverem hospedados na nuvem, você também poderá aproveitar o atributo de [backup automatizado](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) fornecido pelo Amazon Relational Database Service (Amazon RDS) para PostgreSQL. Esse padrão descreve como automatizar backups regulares para instâncias de banco de dados Amazon RDS para PostgreSQL usando o utilitário pg\$1dump.

Observação: as instruções pressupõem que você esteja usando o Amazon RDS. No entanto, você também pode usar essa abordagem para bancos de dados PostgreSQL hospedados fora do Amazon RDS. Para fazer backups, a função do AWS Lambda deve conseguir acessar seus bancos de dados.

Um evento Amazon CloudWatch Events baseado em tempo inicia uma função Lambda que pesquisa [tags de backup específicas aplicadas aos metadados das instâncias de banco de dados](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) PostgreSQL no Amazon RDS. Se as instâncias de banco de dados PostgreSQL tiverem **a tag DBDump BKP:automated =** Active e outras tags de backup necessárias, a função Lambda enviará trabalhos individuais para cada backup de banco de dados para o AWS Batch. 

O AWS Batch processa essas tarefas e carrega os dados de backup em um bucket do Amazon Simple Storage Service (Amazon S3). Esse padrão usa um Dockerfile e um arquivo entrypoint.sh para criar uma imagem de contêiner do Docker que é usada para fazer backups no trabalho do AWS Batch. Após a conclusão do processo de backup, o AWS Batch registra os detalhes do backup em uma tabela de inventário no Amazon DynamoDB. Como proteção adicional, um evento CloudWatch Events inicia uma notificação do Amazon Simple Notification Service (Amazon SNS) se um trabalho falhar no AWS Batch. 

## Pré-requisitos e limitações
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um ambiente computacional gerenciado ou não gerenciado existente. Para obter mais informações, consulte [Ambientes de computação gerenciados e não gerenciados](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) na documentação do AWS Batch. 
+ [Interface de linha de comandos (CLI) versão 2 imagem do Docker](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-docker.html), instalada e configurada.
+ Instâncias de banco de dados do Amazon RDS para PostgreSQL existentes  
+ Um bucket do S3 existente 
+ [jDocker](https://www.docker.com/), instalado e configurado em macOS, Linux ou Windows
+ Familiaridade com a codificação em Lambda. 

## Arquitetura
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-architecture"></a>

![\[Arquitetura para fazer backup de instâncias do Amazon RDS para PostgreSQL usando o utilitário pg_dump.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/3283f739-980b-43d4-aca0-9d77a2ce3b85/images/352e2eab-1b7d-44ec-840a-a772a175e873.png)


 

**Pilha de tecnologia**
+  CloudWatch Eventos da Amazon
+ Amazon DynamoDB
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon RDS
+ Amazon SNS
+ Amazon S3
+ AWS Batch
+ AWS Key Management Service (AWS KMS)
+ AWS Lambda
+ AWS Secrets Manager
+ Docker

## Ferramentas
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-tools"></a>
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — CloudWatch Events fornece um fluxo quase em tempo real de eventos do sistema que descrevem mudanças nos recursos da AWS.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html): o DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece uma performance rápida e previsível com escalabilidade integrada.
+ [Amazon ECR](https://docs.aws.amazon.com/ecr/index.html): o Amazon Elastic Container Registry (Amazon ECR) é um serviço de registro de imagem de contêiner, seguro, escalável e confiável.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/index.html): o Amazon Relational Database Service (Amazon RDS) é um serviço Web que facilita a configuração, a operação e escalabilidade de um banco de dados relacional na Nuvem AWS.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html): o Amazon Simple Notiﬁcation Service (Amazon SNS) é um serviço gerenciado que fornece entrega de mensagens de editores para assinantes.
+ [Amazon S3](https://docs.aws.amazon.com/s3/index.html): o Amazon Simple Storage Service (Amazon S3) serve como armazenamento para a internet.
+ [AWS Batch](https://docs.aws.amazon.com/batch/index.html): o AWS Batch ajuda você a executar workloads de computação em lotes na Nuvem AWS.
+ [AWS KMS](https://docs.aws.amazon.com/kms/index.html): o AWS Key Management Service (AWS KMS) é um serviço gerenciado que facilita a criação e o controle de chaves do AWS KMS, que criptografam seus dados.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/index.html): o AWS Lambda é um serviço de computação com tecnologia que ajuda a executar código sem provisionamento ou gerenciamento de servidores.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/index.html): o Secrets Manager ajuda você a substituir credenciais codificadas em seu código, incluindo senhas, por uma chamada de API ao Secrets Manager para recuperar o segredo programaticamente.
+ [Docker](https://www.docker.com/): o Docker ajuda os desenvolvedores a empacotar, enviar e executar facilmente qualquer aplicativo como um contêiner leve, portátil e autossuficiente.

Suas instâncias de banco de dados PostgreSQL no Amazon RDS devem ter [tags aplicadas aos seus metadados](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html). A função do Lambda pesquisa tags para identificar instâncias de banco de dados que devem ser copiadas, e as tags a seguir são normalmente usadas.


| 
| 
| Tag | Description | 
| --- |--- |
| BKP: Automatizado = Ativo DBDump  | Identifica uma instância de banco de dados Amazon RDS como candidata para backups. | 
| bpm: = AutomatedBackupSecret <secret\$1name > | Identifica o segredo do Secrets Manager que contém as credenciais de login do Amazon RDS. | 
| BKP: S3 Bucket automatizado = DBDump <s3\$1bucket\$1name> | Identifica o bucket do S3 para enviar backups. | 
| BKP: Frequência automatizada DBDumpBKP: Tempo automatizado DBDump | Identifique a frequência e os horários em que o backup dos bancos de dados deve ser feito.  | 
| bkp:pgdumpcommand = <pgdump\$1command> | Identifica os bancos de dados para os quais os backups precisam ser feitos. | 

## Épicos
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-epics"></a>

### Crie uma tabela de inventário no DynamoDB
<a name="create-an-inventory-table-in-dynamodb"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma tabela no DynamoDB. | Faça login no Console de Gerenciamento da AWS e abra o console do Amazon DynamoDB, e crie uma tabela. Para obter ajuda com esse e outros artigos, consulte a seção *Recursos relacionados*. | Administrador de nuvem, administrador de banco de dados | 
| Confirme se a tabela foi criada.  | Execute o comando `aws dynamodb describe-table --table-name <table-name> \| grep TableStatus`. Se a tabela existir, o comando retornará o resultado `"TableStatus": "ACTIVE",`. | Administrador de nuvem, administrador de banco de dados | 

### Crie um tópico do SNS para eventos de trabalho com falha no AWS Batch
<a name="create-an-sns-topic-for-failed-job-events-in-aws-batch"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um tópico do SNS. | Abra o console do Amazon SNS, escolha **Tópicos** e crie um tópico do SNS com o nome `JobFailedAlert`. Inscreva um endereço de e-mail ativo no tópico e verifique sua caixa de entrada de e-mail para confirmar o e-mail de assinatura do SNS a partir do AWS Notifications. | Administrador de nuvem | 
| Crie uma regra de evento de trabalho com falha para o AWS Batch.  | Abra o CloudWatch console da Amazon, escolha **Eventos** e, em seguida, escolha **Criar regra**. Escolha **Mostrar opções avançadas**, e escolha **editar**. Na etapa **Criar um padrão que selecione eventos para processamento pelos seus destinos**, substitua o texto existente pelo código “Evento de trabalho com falha” apresentado na seção *Informações adicionais*. Esse código define uma regra de CloudWatch eventos que começa quando o AWS Batch tem um `Failed` evento. | Administrador de nuvem | 
| Adicione o destino da regra do evento.  | Em **Destinos**, selecione **Adicionar destino** e, em seguida, selecione o Tópico do SNS `JobFailedAlert`. Configurar os detalhes restantes e criar a regra do CloudWatch Events. | Administrador de nuvem | 

### Desenvolva uma imagem do Docker e enviá-la a um repositório do Amazon ECR
<a name="build-a-docker-image-and-push-it-to-an-amazon-ecr-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório do Amazon ECR. | Abra o console do Amazon ECR e escolha a região da AWS na qual você deseja criar seu repositório. Escolha **Repositórios** e depois **Adicionar repositório**. Configure o repositório de acordo com seus requisitos. | Administrador de nuvem | 
| Escreva um Dockerfile.  | Faça login no Docker e use o “Dockerfile de amostra” e o “arquivo entrypoint.sh de amostra” apresentados na seção *Informações adicionais* para criar um Dockerfile. | DevOps engenheiro | 
| Criar uma imagem do Docker e enviá-la ao repositório do Amazon ECR. | Crie o Dockerfile em uma imagem do Docker e envie-a para o repositório do Amazon ECR. Para obter ajuda com esta etapa, consulte a seção *Recursos relacionados*. | DevOps engenheiro | 

### Crie os componentes do AWS Batch
<a name="create-the-aws-batch-components"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar uma definição de trabalho do AWS Batch. | Abra o console do AWS Batch e crie uma definição de trabalho que inclua o Uniform Resource Identifier (URI) do repositório Amazon ECR como propriedade `Image`. | Administrador de nuvem | 
| Configure a fila de trabalhos do AWS Batch.  | No console do AWS Batch, escolha **Filas de trabalhos** e, em seguida, escolha **Criar fila**. Crie uma fila de trabalhos que armazenará trabalhos até que o AWS Batch os execute nos recursos do seu ambiente computacional. Importante: certifique-se de escrever uma lógica para que o AWS Batch registre os detalhes do backup na tabela de inventário do DynamoDB. | Administrador de nuvem | 

### Crie e publique uma função do Lambda
<a name="create-and-schedule-a-lambda-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma função do Lambda para pesquisar tags. | Crie uma função do Lambda que pesquise tags em suas instâncias de banco de dados PostgreSQL e identifique candidatos a backup. Certifique-se de que sua função do Lambda possa identificar a tag `bkp:AutomatedDBDump = Active` e todas as outras tags necessárias. Importante: a função do Lambda também deve conseguir adicionar trabalhos à fila de trabalhos do AWS Batch. | DevOps engenheiro | 
| Crie um evento de CloudWatch eventos com base no tempo.  | Abra o CloudWatch console da Amazon e crie um evento CloudWatch Events que usa uma expressão cron para executar sua função Lambda em uma programação regular. Importante: Todos os eventos programados usam o fuso horário UTC. | Administrador de nuvem | 

### Teste a automação de backup
<a name="test-the-backup-automation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar uma chave do Amazon KMS. | Abra o console do Amazon KMS e crie uma chave KMS que possa ser usada para criptografar as credenciais do Amazon RDS armazenadas no AWS Secrets Manager. | Administrador de nuvem | 
| Criar um segredo do AWS Secrets Manager. | Abra o console do AWS Secrets Manager e armazene suas credenciais do banco de dados do Amazon RDS para PostgreSQL como um segredo. | Administrador de nuvem | 
| Adicione as tags necessárias às instâncias de banco de dados PostgreSQL. | Abra o console do Amazon RDS e adicione tags às instâncias de banco de dados PostgreSQL das quais você deseja fazer backup automático. Você pode usar as tags da tabela na seção *Ferramentas*. Se você precisar gerar backups de vários bancos de dados do PostgreSQL na mesma instância do Amazon RDS, use `-d test:-d test1` como valor da etiqueta `bkp:pgdumpcommand`. `test` e `test1` são nomes de bancos de dados. Certifique-se de que não há espaço após os dois pontos (:). | Administrador de nuvem | 
| Verifique a automação do backup.  | Para verificar a automação do backup, você pode invocar a função do Lambda ou aguardar o início da programação de backup. Depois que o processo de backup estiver concluído, verifique se a tabela de inventário do DynamoDB tem uma entrada de backup válida para suas instâncias de banco de dados PostgreSQL. Se corresponderem, o processo de automação de backup será bem-sucedido. | Administrador de nuvem | 

## Recursos relacionados
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-resources"></a>

**Crie uma tabela de inventário no DynamoDB**
+ [Crie uma tabela do Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)

 

**Crie um tópico do SNS para eventos de trabalho com falha no AWS Batch**
+ [Crie um tópico do Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html)
+ [Envie alertas do SNS sobre eventos de trabalho com falha no AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/batch_sns_tutorial.html)

 

**Desenvolva uma imagem do Docker e enviá-la a um repositório do Amazon ECR**
+ [Crie um repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)    
+ [Escreva um Dockerfile, crie uma imagem do Docker e envie-a para o Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

 

**Crie os componentes do AWS Batch**
+ [Crie uma definição de trabalho do AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-1)    
+ [Configure seu ambiente computacional e a fila de trabalhos do AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-2)   
+ [Crie uma fila de trabalhos no AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/create-job-queue.html)

 

**Criar uma função do Lambda**
+ [Crie uma função do Lambda e escreva código](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)
+ [Use o Lambda com o DynamoDB](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html)

 

**Crie um evento de CloudWatch eventos**
+ [Crie um evento de CloudWatch eventos baseado em tempo](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Scheduled-Rule.html)   
+ [Use expressões cron em eventos do Cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)

 

**Teste a automação de backup**
+ [Crie uma chave do Amazon KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)    
+ [Crie um segredo do Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)
+ [Adicione tags a uma instância do Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html)

## Mais informações
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-additional"></a>

**Evento de trabalho falhado:**

```
{
  "detail-type": [
    "Batch Job State Change"
  ],
  "source": [
    "aws.batch"
  ],
  "detail": {
    "status": [
      "FAILED"
    ]
  }
}
```

**Exemplo de Dockerfile:**

```
FROM alpine:latest
RUN apk --update add py-pip postgresql-client jq bash && \
pip install awscli && \
rm -rf /var/cache/apk/*
ADD entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
```

**Exemplo de arquivo entrypoint.sh:**

```
 #!/bin/bash
set -e
DATETIME=`date +"%Y-%m-%d_%H_%M"`
FILENAME=RDS_PostGres_dump_${RDS_INSTANCE_NAME}
FILE=${FILENAME}_${DATETIME}

aws configure --profile new-profile set role_arn arn:aws:iam::${TargetAccountId}:role/${TargetAccountRoleName}
aws configure --profile new-profile set credential_source EcsContainer

echo "Central Account access provider IAM role is: "
aws sts get-caller-identity

echo "Target Customer Account access provider IAM role is: "
aws sts get-caller-identity --profile new-profile

securestring=$(aws secretsmanager get-secret-value --secret-id $SECRETID --output json --query 'SecretString' --region=$REGION --profile new-profile)

if [[ ${securestring} ]]; then
    echo "successfully accessed secrets manager and got the credentials"
    export PGPASSWORD=$(echo $securestring | jq --raw-output | jq -r '.DB_PASSWORD')
    PGSQL_USER=$(echo $securestring | jq --raw-output | jq -r '.DB_USERNAME')
    echo "Executing pg_dump for the PostGres endpoint ${PGSQL_HOST}"
    # pg_dump -h $PGSQL_HOST -U $PGSQL_USER -n dms_sample | gzip -9 -c  | aws s3 cp - --region=$REGION  --profile new-profile s3://$BUCKET/$FILE
    # in="-n public:-n private"
    IFS=':' list=($EXECUTE_COMMAND);
    for command in "${list[@]}";
      do
        echo $command;
        pg_dump -h $PGSQL_HOST -U $PGSQL_USER ${command} | gzip -9 -c  | aws s3 cp - --region=$REGION --profile new-profile s3://${BUCKET}/${FILE}-${command}".sql.gz"
        echo $?;
        if  [[ $? -ne 0 ]]; then
            echo "Error occurred in database backup process. Exiting now....."
            exit 1
        else
            echo "Postgresql dump was successfully taken for the RDS endpoint ${PGSQL_HOST} and is uploaded to the following S3 location s3://${BUCKET}/${FILE}-${command}.sql.gz"
            #write the details into the inventory table in central account
            echo "Writing to DynamoDB inventory table"
            aws dynamodb put-item --table-name ${RDS_POSTGRES_DUMP_INVENTORY_TABLE} --region=$REGION --item '{ "accountId": { "S": "'"${TargetAccountId}"'" }, "dumpFileUrl": {"S": "'"s3://${BUCKET}/${FILE}-${command}.sql.gz"'" }, "DumpAvailableTime": {"S": "'"`date +"%Y-%m-%d::%H::%M::%S"` UTC"'"}}'
            echo $?
            if  [[ $? -ne 0 ]]; then
                echo "Error occurred while putting item to DynamoDb Inventory Table. Exiting now....."
                exit 1
            else
                echo "Successfully written to DynamoDb Inventory Table ${RDS_POSTGRES_DUMP_INVENTORY_TABLE}"
            fi
        fi
      done;
else
    echo "Something went wrong {$?}"
    exit 1
fi

exec "$@"
```

# Automatize a implantação do Node Termination Handler no Amazon EKS usando um pipeline CI/CD
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline"></a>

*Sandip Gangapadhyay, Sandeep Gawande, Viyoma Sachdeva, Pragtideep Singh e John Vargas, Amazon Web Services*

## Resumo
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-summary"></a>

**Aviso**: CodeCommit A AWS não está mais disponível para novos clientes. Os clientes atuais da AWS CodeCommit podem continuar usando o serviço normalmente. [Saiba mais](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/)

Na nuvem da Amazon Web Services (AWS), você pode usar o [AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler), um projeto de código aberto, para lidar com o desligamento de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) no Kubernetes sem problemas. O AWS Node Termination Handler ajuda a garantir que o plano de controle do Kubernetes responda adequadamente aos eventos que podem fazer com que sua instância fique indisponível. EC2 Esses eventos incluem o seguinte:
+ [EC2 manutenção programada por instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)
+ [Interrupções da Amazon EC2 Spot Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)
+ [Escala de grupos do Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html#as-lifecycle-scale-in)
+ [Rebalanceamento de grupos do Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-benefits.html#AutoScalingBehavior.InstanceUsage) em todas as zonas de disponibilidade
+ EC2 encerramento da instância por meio da API ou do AWS Management Console

Se um evento não for tratado, o código do aplicativo pode não parar normalmente. Também pode levar mais tempo para recuperar a disponibilidade total ou programar acidentalmente o trabalho nos nós que estão sendo desativados. O `aws-node-termination-handler` (NTH) pode operar em dois modos diferentes: serviço de metadados de instância (IMDS) ou Processador de filas. Para obter mais informações sobre os dois modos, consulte o [arquivo Readme](https://github.com/aws/aws-node-termination-handler#readme).

Esse padrão usa AWS CodeCommit e automatiza a implantação do NTH usando o Processador de Filas por meio de um pipeline de integração contínua e entrega contínua (CI/CD).

**nota**  
Se você estiver usando [grupos de nós gerenciados do EKS](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html), não é necessário usar o `aws-node-termination-handler`.

## Pré-requisitos e limitações
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um navegador da web compatível com o Console de Gerenciamento da AWS. Consulte a [lista de navegadores compatíveis](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/).
+ AWS Cloud Development Kit (AWS CDK), [instalado](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install).
+ `kubectl`, a ferramenta de linha de comando do Kubernetes, [instalada](https://kubernetes.io/docs/tasks/tools/).
+ `eksctl`, a AWS Command Line Interface (AWS CLI) para o Amazon Elastic Kubernetes Service (Amazon EKS), [instalado](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html).
+ Um cluster EKS em execução com a versão 1.20 ou superior.
+ Um grupo de nós autogerenciados conectado ao cluster do EKS. Para criar um cluster do Amazon EKS com um grupo de nós autogerenciado, execute o comando a seguir.

  ```
  eksctl create cluster --managed=false --region <region> --name <cluster_name>
  ```

  Para obter mais informações sobre `eksctl`, consulte a [documentação do eksctl](https://eksctl.io/usage/creating-and-managing-clusters/).
+ AWS Identity and Access Management (IAM) provedor OpenID Connect (OIDC) para o seu cluster. Para obter mais informações, consulte [Criar um provedor IAM OIDC para o cluster](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html).

**Limitações**
+ Você deve usar uma região da AWS que ofereça suporte ao serviço Amazon EKS.

**Versões do produto**
+ Kubernetes versão 1.20 ou superior
+ `eksctl` versão 0.107.0 ou superior
+ AWS CDK versão 2.27.0 ou superior

## Arquitetura
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-architecture"></a>

**Pilha de tecnologias de destino**
+ Uma nuvem privada virtual (VPC)
+ Um cluster do EKS
+ Amazon Simple Queue Service (Amazon SQS)
+ IAM
+ Kubernetes

**Arquitetura de destino**** **

O diagrama a seguir mostra a visão de alto nível das end-to-end etapas em que a terminação do nó é iniciada.

![\[Uma VPC com um grupo do Auto Scaling, um cluster do EKS com o Node Termination Handler e uma fila do SQS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/970dfb73-9526-4942-a974-e8eef6416596/images/9e0125ae-d55b-49dd-ae70-ccaedf03832a.png)


O fluxo de trabalho mostrado no diagrama consiste nas seguintes etapas de alto nível:

1. O evento de encerramento automático da EC2 instância de escalabilidade é enviado para a fila do SQS.

1. O NTH Pod monitora novas mensagens na fila SQS.

1. O NTH Pod recebe a nova mensagem e faz o seguinte:
   + Protege o nó para que o novo pod não seja executado no nó.
   + Drena o nó, para que o pod existente seja evacuado
   + Envia um sinal de gancho do ciclo de vida para o grupo do Auto Scaling para que o nó possa ser encerrado.

**Automação e escala**
+ O código é gerenciado e implantado pelo AWS CDK, apoiado por pilhas CloudFormation aninhadas da AWS.
+ O [ambiente de gerenciamento do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/disaster-recovery-resiliency.html) é executado em várias zonas de disponibilidade para assegurar alta disponibilidade.
+ [Para [escalabilidade automática, o](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) Amazon EKS oferece suporte ao Kubernetes [Cluster](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) Autoscaler e ao Karpenter](https://karpenter.sh/).

## Ferramentas
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-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 você a definir e provisionar a infraestrutura da Nuvem AWS em código.
+  CodeBuildA [AWS](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de criação totalmente gerenciado que ajuda você a compilar o código-fonte, executar testes unitários e produzir artefatos prontos para implantação.
+  CodeCommitA [AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda você a armazenar e gerenciar repositórios Git de forma privada, sem precisar gerenciar seu próprio sistema de controle de origem.
+  CodePipelineA [AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software e automatizar as etapas necessárias para liberar alterações de software continuamente.
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.
+ [O Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) ajuda você a manter a disponibilidade do aplicativo e permite que você adicione ou remova automaticamente EC2 instâncias da Amazon de acordo com as condições definidas por você.
+ 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**
+ [Kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/) é uma ferramenta de linha de comando para executar comandos em clusters do Kubernetes. Você pode usar o kubectl para implantar aplicativos, inspecionar e gerenciar recursos de cluster e visualizar registros.

**Código **

O código desse padrão está disponível no [deploy-nth-to-eks](https://github.com/aws-samples/deploy-nth-to-eks)repositório em GitHub .com. O repositório do código contém os seguintes arquivos e pastas.
+ `nth folder`— O gráfico do Helm, os arquivos de valores e os scripts para escanear e implantar o CloudFormation modelo da AWS para o Node Termination Handler.
+ `config/config.json`: o arquivo de parâmetros de configuração do aplicativo. Esse arquivo contém todos os parâmetros necessários para a implantação do CDK.
+ `cdk`: o código-fonte do AWS CDK.
+ `setup.sh`— O script usado para implantar o aplicativo AWS CDK para criar o CI/CD pipeline necessário e outros recursos necessários.
+ `uninstall.sh`: o script usado para limpar os recursos.

Para usar o código de exemplo, siga as instruções na seção *Épicos*.

## Práticas recomendadas
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-best-practices"></a>

Para obter as melhores práticas ao automatizar o Manipulador do término do nó da AWS, consulte o seguinte:
+ [Guias de melhores práticas do EKS](https://aws.github.io/aws-eks-best-practices/)
+ [Manipulador do término do nó - Configuração](https://github.com/aws/aws-node-termination-handler/tree/main/config/helm/aws-node-termination-handler)

## Épicos
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-epics"></a>

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório. | Para clonar o repositório usando SSH (Secure Shell), execute o comando a seguir.<pre>git clone git@github.com:aws-samples/deploy-nth-to-eks.git</pre>Para clonar o repositório usando HTTPS, execute o comando a seguir.<pre>git clone https://github.com/aws-samples/deploy-nth-to-eks.git</pre>A clonagem do repositório cria uma pasta chamada `deploy-nth-to-eks`.Mude para esse diretório.<pre>cd deploy-nth-to-eks</pre> | Desenvolvedor de aplicativos, AWS DevOps, DevOps engenheiro | 
| Defina o arquivo kubeconfig. | Defina as suas credenciais da AWS em seu terminal e confirme se você tem direitos para assumir a função de cluster. Você pode usar o seguinte exemplo de código.<pre>aws eks update-kubeconfig --name <Cluster_Name> --region <region>--role-arn <Role_ARN></pre> | AWS DevOps, DevOps engenheiro, desenvolvedor de aplicativos | 

### Implante o CI/CD pipeline
<a name="deploy-the-ci-cd-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure os parâmetros. | No arquivo `config/config.json`, configure os seguintes parâmetros necessários.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) | Desenvolvedor de aplicativos, AWS DevOps, DevOps engenheiro | 
| Crie o CI/CD pipeline para implantar o NTH. | Execute o script setup.sh.<pre>./setup.sh</pre>O script implantará o aplicativo AWS CDK que criará o CodeCommit repositório com o código de exemplo, o pipeline e os CodeBuild projetos com base nos parâmetros de entrada do usuário no `config/config.json` arquivo.Esse script solicitará a senha ao instalar pacotes npm com o comando sudo. | Desenvolvedor de aplicativos, AWS DevOps, DevOps engenheiro | 
| Revise o CI/CD pipeline. | Abra o Console de Gerenciamento da AWS e analise os seguintes recursos criados na pilha.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html)Depois que o pipeline é executado com sucesso, a versão `aws-node-termination-handler` do Helm é instalada no cluster EKS. Além disso, um pod chamado `aws-node-termination-handler` está sendo executado no namespace `kube-system` do cluster. | Desenvolvedor de aplicativos, AWS DevOps, DevOps engenheiro | 

### Teste a implantação do NTH
<a name="test-nth-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Simule um evento de escalonamento de grupo do Auto Scaling. | Para simular um evento de escalonamento automático, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) |  | 
| Revise os registros. | Durante o evento de expansão, o NTH Pod isolará e drenará o nó de trabalho correspondente (a EC2 instância que será encerrada como parte do evento de expansão). Para verificar os registros, use o código na seção *Informações adicionais*. | Desenvolvedor de aplicativos, AWS DevOps, DevOps engenheiro | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe todos os recursos da AWS. | Para limpar os recursos criados por esse padrão, execute o comando a seguir.<pre>./uninstall.sh</pre>Isso limpará todos os recursos criados nesse padrão excluindo a CloudFormation pilha. | DevOps engenheiro | 

## Solução de problemas
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O registro npm não está configurado corretamente. | Durante a instalação dessa solução, o script instala o npm install para baixar todos os pacotes necessários. Se, durante a instalação, você se deparar com uma mensagem que diz “Não é possível encontrar o módulo”, o registro npm pode não estar configurado corretamente. Para ver a configuração de registro atual, use o comando a seguir.<pre>npm config get registry</pre>Para definir o registro com `https://registry.npmjs.org/`, execute o seguinte comando.<pre>npm config set registry https://registry.npmjs.org</pre> | 
| Atrasar a entrega de mensagens do SQS. | Como parte da solução de problemas, se quiser atrasar a entrega da mensagem SQS para o NTH Pod, você pode ajustar o parâmetro de atraso na entrega do SQS. Para obter mais informações, consulte [Filas de atraso do Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html). | 

## Recursos relacionados
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-resources"></a>
+ [Código-fonte do Manipulador do término do nó da AWS](https://github.com/aws/aws-node-termination-handler)
+ [EC2 oficina](https://ec2spotworkshops.com/using_ec2_spot_instances_with_eks/070_selfmanagednodegroupswithspot/deployhandler.html)
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/)
+ [Kit de desenvolvimento da Nuvem AWS](https://aws.amazon.com/cdk/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)

## Mais informações
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-additional"></a>

1. Encontre o nome do NTH Pod.

```
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
```

2. Verificar os logs. Um log de exemplo se parece com o seguinte. Isso mostra que o nó foi isolado e drenado antes de enviar o sinal de conclusão do gancho do ciclo de vida do grupo do Auto Scaling.

```
kubectl -n kube-system logs aws-node-termination-handler-65445555-kbqc7
022/07/17 20:20:43 INF Adding new event to the event store event={"AutoScalingGroupName":"eksctl-my-cluster-target-nodegroup-ng-10d99c89-NodeGroup-ZME36IGAP7O1","Description":"ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n","EndTime":"0001-01-01T00:00:00Z","EventID":"asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564","InProgress":false,"InstanceID":"i-0409f2a9d3085b80e","IsManaged":true,"Kind":"SQS_TERMINATE","NodeLabels":null,"NodeName":"ip-192-168-75-60.us-east-2.compute.internal","NodeProcessed":false,"Pods":null,"ProviderID":"aws:///us-east-2c/i-0409f2a9d3085b80e","StartTime":"2022-07-17T20:20:42.702Z","State":""}
2022/07/17 20:20:44 INF Requesting instance drain event-id=asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564 instance-id=i-0409f2a9d3085b80e kind=SQS_TERMINATE node-name=ip-192-168-75-60.us-east-2.compute.internal provider-id=aws:///us-east-2c/i-0409f2a9d3085b80e
2022/07/17 20:20:44 INF Pods on node node_name=ip-192-168-75-60.us-east-2.compute.internal pod_names=["aws-node-qchsw","aws-node-termination-handler-65445555-kbqc7","kube-proxy-mz5x5"]
2022/07/17 20:20:44 INF Draining the node
2022/07/17 20:20:44 ??? WARNING: ignoring DaemonSet-managed Pods: kube-system/aws-node-qchsw, kube-system/kube-proxy-mz5x5
2022/07/17 20:20:44 INF Node successfully cordoned and drained node_name=ip-192-168-75-60.us-east-2.compute.internal reason="ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n"
2022/07/17 20:20:44 INF Completed ASG Lifecycle Hook (NTH-K8S-TERM-HOOK) for instance i-0409f2a9d3085b80e
```

# Crie e implante automaticamente um aplicativo Java no Amazon EKS usando um CI/CD pipeline
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline"></a>

*MAHESH RAGHUNANDANAN, Jomcy Pappachen e James Radtke, Amazon Web Services*

## Resumo
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-summary"></a>

Esse padrão descreve como criar um pipeline de integração contínua e entrega contínua (CI/CD) que cria e implanta automaticamente um aplicativo Java com as DevSecOps práticas recomendadas em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) no. Nuvem AWS Esse padrão usa um aplicativo de saudação desenvolvido com uma estrutura Java Spring Boot e que usa o Apache Maven.

Você pode usar a abordagem deste padrão para compilar o código para um aplicativo Java, empacotar os artefatos do aplicativo como uma imagem do Docker, verificar a segurança da imagem e fazer o upload da imagem como um contêiner de workload no Amazon EKS. A abordagem deste padrão é útil se você quiser migrar de uma arquitetura monolítica fortemente acoplada para uma arquitetura de microsserviços. A abordagem também ajuda você a monitorar e gerenciar todo o ciclo de vida de um aplicativo Java, o que garante um nível mais alto de automação e ajuda a evitar erros ou bugs.

## Pré-requisitos e limitações
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ AWS Command Line Interface (AWS CLI) versão 2, instalada e configurada. Para obter mais informações sobre isso, consulte [Instalação ou atualização para a versão mais recente do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) na AWS CLI documentação.

  AWS CLI a versão 2 deve ser configurada com a mesma função AWS Identity and Access Management (IAM) que cria o cluster Amazon EKS, porque somente essa função está autorizada a adicionar outras funções do IAM ao `aws-auth``ConfigMap`. Para obter informações e etapas de configuração AWS CLI, consulte [Definindo configurações](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) na AWS CLI documentação.
+ Funções e permissões do IAM com acesso total AWS CloudFormation a. Para obter mais informações sobre isso, consulte Como [controlar o acesso com o IAM](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) na CloudFormation documentação.
+ Um cluster existente do Amazon EKS, com detalhes do nome do perfil do IAM e o nome do recurso da Amazon (ARN) do perfil do IAM dos nós de processamento no cluster do EKS.
+ Kubernetes Cluster Autoscaler, instalado e configurado em seu cluster Amazon EKS. Para obter mais informações, consulte [Escalar a computação em cluster com o Karpenter e o Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) na documentação do Amazon EKS. 
+ Acesso ao código no GitHub repositório.

**Importante**  
AWS Security Hub CSPM é habilitado como parte dos CloudFormation modelos incluídos no código desse padrão. Por padrão, depois que o Security Hub CSPM é ativado, ele vem com um teste gratuito de 30 dias. Ao fim dessa avaliação, esse AWS service (Serviço da AWS) tem um custo associado. Para obter mais informações sobre preços, consulte [Preços do AWS Security Hub CSPM](https://aws.amazon.com/security-hub/pricing/).

**Versões do produto**
+ Helm versão 3.4.2 ou superior
+ Apache Maven versão 3.6.3 ou mais recente
+ BridgeCrew Checkov versão 2.2 ou posterior
+ Aqua Security Trivy versão 0.37 ou mais recente

## Arquitetura
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-architecture"></a>

**Pilha de tecnologia**
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon CodeGuru
+ AWS CodePipeline
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon EKS
+ Amazon EventBridge
+ AWS Security Hub CSPM
+ Amazon Simple Notiﬁcation Service (Amazon SNS)

**Arquitetura de destino**

![\[Fluxo de trabalho para implantar uma aplicação em Java no Amazon EKS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O desenvolvedor atualiza o código do aplicativo Java na ramificação base do CodeCommit repositório, o que cria uma pull request (PR).

1. Assim que o PR é enviado, o Amazon CodeGuru Reviewer revisa automaticamente o código, o analisa com base nas melhores práticas de Java e fornece recomendações ao desenvolvedor.

1. Depois que o PR é mesclado com a filial base, um EventBridge evento da Amazon é criado.

1. O EventBridge evento inicia o CodePipeline pipeline, que começa.

1. CodePipeline executa o estágio de CodeSecurity digitalização (segurança contínua).

1. AWS CodeBuild inicia o processo de verificação de segurança no qual os arquivos Helm de implantação do Dockerfile e do Kubernetes são verificados usando o Checkov, e o código-fonte do aplicativo é escaneado com base em alterações incrementais no código. A verificação do código-fonte do aplicativo é realizada pelo wrapper da [interface de linha de comando (CLI) do CodeGuru Reviewer](https://github.com/aws/aws-codeguru-cli).
**nota**  
A partir de 7 de novembro de 2025, você não pode criar novas associações de repositórios no Amazon CodeGuru Reviewer. Para saber mais sobre serviços com recursos semelhantes aos do CodeGuru Reviewer, consulte a [mudança de disponibilidade do Amazon CodeGuru Reviewer na documentação](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) do CodeGuru Reviewer. 

1. Se o estágio de verificação de segurança for bem-sucedido, o estágio de compilação (integração contínua) será inicializado.

1. No estágio CodeBuild Build, cria o artefato, empacota o artefato em uma imagem do Docker, escaneia a imagem em busca de vulnerabilidades de segurança usando o Aqua Security Trivy e armazena a imagem no Amazon ECR.

1. As vulnerabilidades detectadas na etapa 8 são enviadas para o Security Hub CSPM para análise posterior por desenvolvedores ou engenheiros. O Security Hub CSPM fornece uma visão geral e recomendações para remediar as vulnerabilidades.

1. As notificações por e-mail das fases sequenciais dentro do CodePipeline pipeline são enviadas pelo Amazon SNS.

1. Depois que as fases de integração contínua forem concluídas, CodePipeline entra no estágio de implantação (entrega contínua).

1. A imagem do Docker é implantada no Amazon EKS como uma workload de contêiner (pod) usando charts do Helm.

1. O pod do aplicativo é configurado com o agente Amazon CodeGuru Profiler, que envia os dados de perfil do aplicativo (CPU, uso do heap e latência) para o CodeGuru Profiler, o que ajuda os desenvolvedores a entender o comportamento do aplicativo.

## Ferramentas
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-tools"></a>

**Serviços da 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.
+  O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ O [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda no armazenamento e no gerenciamento de repositórios Git de forma privada, sem a necessidade de administrar o próprio sistema de controle de origem.
+ [O Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) coleta dados de desempenho de tempo de execução de seus aplicativos ativos e fornece recomendações que podem ajudá-lo a ajustar o desempenho do seu aplicativo.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+  EventBridgeA [Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) é um serviço de barramento de eventos sem servidor que ajuda você a conectar seus aplicativos a dados em tempo real de várias fontes, incluindo AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outras. Contas da AWS
+ [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 Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)fornece uma visão abrangente do seu estado de segurança em AWS. Também ajuda você a verificar seu AWS ambiente de acordo com os padrões e as melhores práticas do setor de segurança.
+ 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 [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.

**Outros serviços**
+ O [Helm](https://helm.sh/docs/) é um gerenciador de pacotes de código aberto para o Kubernetes.
+ O [Apache Maven](https://maven.apache.org/) é uma ferramenta de gerenciamento e compreensão de projetos de software.
+ BridgeCrew O [Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) é uma ferramenta estática de análise de código para escanear a infraestrutura como arquivos de código (IaC) em busca de configurações incorretas que possam levar a problemas de segurança ou conformidade.
+ O [Aqua Security Trivy](https://github.com/aquasecurity/trivy) é um scanner abrangente para vulnerabilidades em imagens de contêineres, sistemas de arquivos e repositórios Git, além de problemas de configuração.

**Código **

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

## Práticas recomendadas
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-best-practices"></a>
+ Este padrão segue as [práticas recomendadas de segurança do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) para aplicar o princípio de privilégio mínimo para entidades do IAM em todas as fases da solução. Se você quiser estender a solução com ferramentas adicionais Serviços da AWS ou de terceiros, recomendamos que você revise a seção sobre a [aplicação de permissões de privilégios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) na documentação do IAM.
+ Se você tiver vários aplicativos Java, recomendamos criar CI/CD pipelines separados para cada aplicativo.
+ Se você tiver uma aplicação monolítica, recomendamos dividir a aplicação em microsserviços onde for possível. Os microsserviços são mais flexíveis, facilitam a implantação de aplicativos como contêineres e fornecem melhor visibilidade da compilação e implantação gerais do aplicativo.

## Épicos
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-epics"></a>

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o GitHub repositório. | Para clonar o repositório, execute o comando a seguir.<pre>git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks</pre> | Desenvolvedor de aplicativos, DevOps engenheiro | 
| Crie um bucket do S3 faça o upload do código. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, administrador de nuvem, DevOps engenheiro | 
| Crie uma CloudFormation pilha. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps engenheiro | 
| Valide a implantação da CloudFormation pilha. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps engenheiro | 
| Exclua o bucket do S3. | Esvazie e exclua o bucket do S3 criado anteriormente. Para obter mais informações, consulte [Excluir um bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) na documentação do Amazon S3 | AWS DevOps, DevOps engenheiro | 

### Configurar os charts do Helm
<a name="configure-the-helm-charts"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure os charts do Helm do seu aplicativo Java. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps engenheiro | 
| Valide os charts do Helm em busca de erros de sintaxe. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps engenheiro | 

### Configurar o CI/CD pipeline Java
<a name="set-up-the-java-ci-cd-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o CI/CD pipeline. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps | 

### Ative a integração entre o Security Hub CSPM e o Aqua Security
<a name="activate-integration-between-ash-and-aqua-security"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Ative a integração com o Aqua Security. | Essa etapa é necessária para fazer o upload das descobertas da vulnerabilidade de imagem do Docker relatadas pela Trivy para o Security Hub CSPM. Como CloudFormation não oferece suporte às integrações CSPM do Security Hub, esse processo deve ser feito manualmente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | Administrador e DevOps engenheiro da AWS | 

### Configure CodeBuild para executar os comandos Helm ou kubectl
<a name="configure-acb-to-run-helm-or-kubectl-commands"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Permita CodeBuild a execução de comandos Helm ou kubectl no cluster Amazon EKS. |  CodeBuild Para ser autenticado para usar o Helm ou `kubectl` comandos com o cluster Amazon EKS, você deve adicionar as funções do IAM ao. `aws-auth` `ConfigMap` Nesse caso, adicione o ARN da função do IAM`EksCodeBuildkubeRoleARN`, que é a função do IAM criada para que o CodeBuild serviço acesse o cluster do Amazon EKS e implante cargas de trabalho nele. Essa é uma atividade feita uma única vez.O procedimento a seguir deve ser concluído antes do estágio de aprovação da implantação em CodePipeline.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)O `aws_auth``ConfigMap` está configurado e o acesso é concedido.  | DevOps | 

### Valide o pipeline CI/CD
<a name="validate-the-ci-cd-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique se o CI/CD pipeline é iniciado automaticamente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)Para obter mais informações sobre como iniciar o pipeline usando CodePipeline, consulte [Iniciar um pipeline em](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)CodePipeline, [Iniciar um pipeline manualmente](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html) e [Iniciar um pipeline em um cronograma](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-trigger-source-schedule.html) na CodePipeline documentação. | DevOps | 
| Aprove a implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps | 
| Valide o perfil do aplicativo. | Depois que a implantação for concluída e o pod do aplicativo for implantado no Amazon EKS, o agente do Amazon CodeGuru Profiler que está configurado no aplicativo tentará enviar dados de perfil do aplicativo (CPU, resumo da pilha, latência e gargalos) para o Profiler. CodeGuru Para a implantação inicial de um aplicativo, o CodeGuru Profiler leva cerca de 15 minutos para visualizar os dados de criação de perfil. | AWS DevOps | 

## Recursos relacionados
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-resources"></a>
+ [AWS CodePipeline documentação](https://docs.aws.amazon.com/codepipeline/index.html)
+ [Digitalizando imagens com o Trivy em uma AWS CodePipeline](https://aws.amazon.com/blogs/containers/scanning-images-with-trivy-in-an-aws-codepipeline/) (postagem AWS do blog)
+ [Melhorando seus aplicativos Java usando o Amazon CodeGuru Profiler](https://aws.amazon.com/blogs/devops/improving-your-java-applications-using-amazon-codeguru-profiler) (postagem AWS no blog)
+ [AWS Sintaxe do Security Finding Format (ASFF)](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html)
+ [Padrões de EventBridge eventos da Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Atualização do Helm](https://helm.sh/docs/helm/helm_upgrade/)

## Mais informações
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-additional"></a>
+ CodeGuru O Profiler não deve ser confundido com o AWS X-Ray serviço em termos de funcionalidade. Recomendamos que você use o CodeGuru Profiler para identificar as linhas de código mais caras que podem causar gargalos ou problemas de segurança e corrigi-las antes que se tornem um risco potencial. O serviço X-Ray é para o monitoramento da performance de aplicações.
+ Neste padrão, as regras de eventos são associadas ao barramento de eventos padrão. Se necessário, você pode estender o padrão para usar um barramento de eventos personalizado.
+ Esse padrão usa o CodeGuru Reviewer como uma ferramenta estática de teste de segurança de aplicativos (SAST) para o código do aplicativo. Você também pode usar esse pipeline para outras ferramentas, como SonarQube o Checkmarx. Você pode adicionar as instruções de configuração de escaneamento de qualquer uma dessas ferramentas `buildspec/buildspec_secscan.yaml` para substituir as instruções de CodeGuru escaneamento.
**nota**  
A partir de 7 de novembro de 2025, você não pode criar novas associações de repositórios no Amazon CodeGuru Reviewer. Para saber mais sobre serviços com recursos semelhantes aos do CodeGuru Reviewer, consulte a [mudança de disponibilidade do Amazon CodeGuru Reviewer na documentação](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) do CodeGuru Reviewer.

# Copie imagens de contêineres do Amazon ECR entre e Contas da AWS Regiões da AWS
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

## Resumo
<a name="copy-ecr-container-images-across-accounts-regions-summary"></a>

Esse padrão mostra como usar uma abordagem sem servidor para replicar imagens marcadas de repositórios existentes do Amazon Elastic Container Registry (Amazon ECR) para outros repositórios e. Contas da AWS Regiões da AWS A solução é usada AWS Step Functions para gerenciar o fluxo de trabalho de replicação e AWS Lambda as funções para copiar imagens de contêineres grandes.

O Amazon ECR usa recursos nativos de replicação [entre regiões](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) e [entre contas](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount), que replicam imagens de contêiner por diferentes regiões e contas. No entanto, esses recursos só passam a replicar imagens depois que a replicação é ativada. Não existe um mecanismo para replicar imagens já existentes em diferentes regiões e contas. 

Esse padrão ajuda as equipes de inteligência artificial (IA) a distribuir modelos, estruturas de aprendizado de máquina (ML) em contêineres (por exemplo, PyTorch TensorFlow, e Hugging Face) e dependências para outras contas e regiões. Isso pode auxiliar na superação de limitações de serviço e na otimização do uso de recursos de computação, como GPU. É possível replicar somente determinados repositórios do Amazon ECR provenientes de contas e regiões específicas. Para obter mais informações, consulte [Cross-Region replication in Amazon ECR has landed](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/).

## Pré-requisitos e limitações
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Pré-requisitos **
+ Duas ou mais ativas Contas da AWS (uma conta de origem e uma conta de destino, no mínimo)
+ Permissões apropriadas AWS Identity and Access Management (IAM) em todas as contas
+ Docker para criar a imagem de contêiner do Lambda
+ AWS Command Line Interface (AWS CLI) configurado para todas as contas

**Limitações**
+ **Exclusão de imagens sem etiquetas**: a solução copia apenas imagens de contêiner que contam com etiquetas explícitas. Imagens sem etiquetas que contam com arquivos de resumo `SHA256` são desconsideradas.
+ **Restrições de tempo limite de execução do Lambda — AWS Lambda é limitado a um tempo limite máximo de execução de 15 minutos, o que pode ser insuficiente para copiar grandes imagens de contêineres** ou repositórios.
+ **Gerenciamento manual de imagens de contêiner**: o código Python `crane-app.py` requer um novo desenvolvimento e implantação da imagem de contêiner do Lambda.
+ **Capacidade limitada de processamento paralelo**: a configuração `MaxConcurrency` destinada ao estado limita quantos repositórios podem ser copiados simultaneamente. No entanto, você pode modificar essa configuração no AWS CloudFormation modelo da conta de origem. É válido salientar que valores de concorrência mais elevados podem fazer você exceder os limites de taxa do serviço e as cotas de execução do Lambda no nível da conta.

## Arquitetura
<a name="copy-ecr-container-images-across-accounts-regions-architecture"></a>

**Pilha de destino**

O padrão conta com quatro componentes principais:
+ **Infraestrutura da conta de origem —** CloudFormation modelo que cria os componentes de orquestração
+ **Infraestrutura da conta de destino —** CloudFormation modelo que cria funções de acesso entre contas
+ **Função do Lambda**: função baseada em Python que usa a ferramenta Crane para realizar uma cópia eficiente das imagens
+ **Imagem de contêiner**: o contêiner do Docker que adiciona as ferramentas necessárias na função do Lambda

**Arquitetura de destino**

![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/cc7d9823-3dc8-4090-a203-910b1ac4447c.png)


**Fluxo de trabalho do Step Functions**

A máquina de estado do Step Functions realiza a orquestração das seguintes etapas, como ilustrado no diagrama a seguir:
+ `PopulateRepositoryList`**:** realiza verificações nos repositórios do Amazon ECR e preenche o Amazon DynamoDB
+ `GetRepositoryList`**:** recupera uma lista exclusiva de repositórios do DynamoDB
+ `DeduplicateRepositories`**:** garante que não haja processamento duplicado
+ `CopyRepositories`**:** gerencia a cópia paralela dos repositórios
+ `NotifySuccess`/`NotifyFailure`**:** envia notificações pelo Amazon Simple Notiﬁcation Service (Amazon SNS) com base no resultado da execução

![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/1b740084-ba2b-4956-aa12-ebbf52be5e7d.png)


## Ferramentas
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Ferramentas da Amazon**
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ajuda você a monitorar as métricas dos seus AWS recursos e dos aplicativos em que você executa 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 [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 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 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**
+ O [Crane](https://michaelsauter.github.io/crane/index.html) é uma ferramenta de orquestração do Docker. É semelhante ao Docker Compose, mas conta com recursos adicionais.
+ O [Docker](https://www.docker.com/) é um conjunto de produtos de plataforma como serviço (PaaS) que usam virtualização em nível de sistema operacional para disponibilizar software em contêineres.

**Repositório de código**
+ O código desse padrão está disponível no GitHub [sample-ecr-copy repositório.](https://github.com/aws-samples/sample-ecr-copy) Você pode usar o CloudFormation modelo do repositório para criar os recursos subjacentes.

## Práticas recomendadas
<a name="copy-ecr-container-images-across-accounts-regions-best-practices"></a>

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="copy-ecr-container-images-across-accounts-regions-epics"></a>

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure AWS CLI perfis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de dados, engenheiro de ML | 
| Colete as informações necessárias. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de dados, engenheiro de ML | 
| Clonar o repositório. | Clone o repositório do padrão para sua estação de trabalho local:<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps engenheiro, engenheiro de dados, engenheiro de ML | 

### Implantação da infraestrutura para a conta de destino
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Valide o modelo. | Valide o CloudFormation modelo:<pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Implante a infraestrutura da conta de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Verificar a implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 

### Desenvolvimento e implantação da imagem de contêiner do Lambda
<a name="build-and-deploy-the-lam-container-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Prepare o desenvolvimento do contêiner. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Crie a imagem do contêiner. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Crie um repositório e faça o upload da imagem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Verifique a imagem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 

### Implantação da infraestrutura da conta de origem
<a name="deploy-the-source-account-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Prepare os parâmetros de implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, DevOps engenheiro, engenheiro de ML | 
| Valide o modelo de origem. | Valide o CloudFormation modelo de origem:<pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Implante a infraestrutura de origem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 
| Verifique a implantação e colete as saídas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Confirme sua inscrição por e-mail. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Engenheiro de dados, engenheiro de ML, DevOps engenheiro | 

### Execução e monitoramento do processo de cópia
<a name="run-and-monitor-the-copy-process"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute e monitore o processo de cópia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Execute a função de etapa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Monitore o progresso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Verifique os resultados. | Aguarde o processo ser concluído (com atualizações a cada 30 segundos):<pre>while true; do<br />  STATUS=$(aws stepfunctions describe-execution \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'status' \<br />    --output text)<br />  <br />  echo "Current status: $STATUS"<br />  <br />  if [[ "$STATUS" == "SUCCEEDED" || "$STATUS" == "FAILED" || "$STATUS" == "TIMED_OUT" || "$STATUS" == "ABORTED" ]]; then<br />    break<br />  fi<br />  <br />  sleep 30<br />done<br /><br />echo "Final execution status: $STATUS"</pre> | DevOps engenheiro, engenheiro de ML, engenheiro de dados | 
| Verifique as imagens. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps engenheiro, engenheiro de dados, engenheiro de ML | 

## Solução de problemas
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Não foi possível executar o Step Functions. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | 

## Recursos relacionados
<a name="copy-ecr-container-images-across-accounts-regions-resources"></a>
+ [Documentação do Crane](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [O que é o Amazon Elastic Container Registry?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [O que é AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [O que é Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Mais informações
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Parâmetros de configuração**


| 
| 
| Parâmetro | Description | Exemplo | 
| --- |--- |--- |
| `SourceAccountId` |  Conta da AWS ID de origem | `11111111111` | 
| `DestinationAccountId` |  Conta da AWS ID de destino | `22222222222` | 
| `DestinationRegion` | Alvo Região da AWS | `us-east-2` | 
| `SourceRegion` | Fonte Região da AWS | `us-east-1` | 
| `NotificationEmail` | E-mail para receber notificações | `abc@xyz.com` | 
| `RepositoryList` | Repositórios a serem copiados | `repo1,repo2,repo3` | 
| `LambdaImageUri` | URI da imagem de contêiner do Lambda | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 

# Crie uma definição de tarefa do Amazon ECS e monte um sistema de arquivos em EC2 instâncias usando o Amazon EFS
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs"></a>

*Durga Prasad Cheepuri, Amazon Web Services*

## Resumo
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-summary"></a>

Esse padrão fornece exemplos de código e etapas para criar uma definição de tarefa do Amazon Elastic Container Service (Amazon ECS) que é executada em instâncias do Amazon Elastic Compute Cloud ( EC2Amazon) na Amazon Web Services (AWS) Cloud, enquanto usa o Amazon Elastic File System (Amazon EFS) para montar um sistema de arquivos nessas instâncias. EC2 As tarefas do Amazon ECS que usam o Amazon EFS montam automaticamente os sistemas de arquivos que você especifica na definição de tarefa e disponibilizam esses sistemas de arquivos para os contêineres da tarefa em todas as zonas de disponibilidade em uma região da AWS.

Para atender aos seus requisitos de armazenamento persistente e armazenamento compartilhado, você pode usar o Amazon ECS e o Amazon EFS juntos. Por exemplo, você pode usar o Amazon EFS para armazenar dados persistentes de usuários e dados de aplicações para suas aplicações com pares de contêineres ECS ativos e em espera em execução em diferentes zonas de disponibilidade para alta disponibilidade. Você também pode usar o Amazon EFS para armazenar dados compartilhados que podem ser acessados paralelamente por contêineres do ECS e workloads distribuídas.

Para usar o Amazon EFS com o Amazon ECS, você pode adicionar uma ou mais definições de volume a uma definição de tarefa. Uma definição de volume inclui um ID do sistema de arquivos do Amazon EFS, ID do ponto de acesso e uma configuração para autorização do AWS Identity and Access Management (IAM) ou criptografia Transport Layer Security (TLS) em trânsito. Você pode usar as definições de contêiner nas definições de tarefas para especificar os volumes de definição de tarefas que são montados quando o contêiner é executado. Quando uma tarefa que usa um sistema de arquivos do Amazon EFS é executada, o Amazon ECS garante que o sistema de arquivos esteja montado e disponível para os contêineres que precisam acessá-lo.

## Pré-requisitos e limitações
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma nuvem privada virtual (VPC) com um endpoint de rede privada virtual (VPN) ou um roteador
+ (Recomendado) [Agente de contêiner do Amazon ECS 1.38.0 ou superior](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-versions.html) para compatibilidade com pontos de acesso do Amazon EFS e atributos de autorização do IAM (Para obter mais informações, consulte a postagem do blog da AWS [Novo para Amazon EFS – Autorização do IAM e](https://aws.amazon.com/blogs/aws/new-for-amazon-efs-iam-authorization-and-access-points/) Pontos de acesso).

**Limitações**
+ As versões do agente de contêiner do Amazon ECS anteriores à 1.35.0 não oferecem suporte aos sistemas de arquivos do Amazon EFS para tarefas que usam o EC2 tipo de execução.

## Arquitetura
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-architecture"></a>

O diagrama a seguir mostra um exemplo de um aplicativo que usa o Amazon ECS para criar uma definição de tarefa e montar um sistema de arquivos do Amazon EFS em EC2 instâncias em contêineres do ECS.

![\[Amazon ECS architecture with task definition, ECS service, containers, and EFS file system integration.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/images/343e0f1d-44ee-4ec2-8392-aeddc0e48b83.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Criar um sistema de arquivos do Amazon EFS.

1. Crie uma definição de tarefa com um contêiner.

1. Configure as instâncias do contêiner para montar o sistema de arquivos do Amazon EFS. As definições de tarefa referenciam montagens de volume de modo que a instância de contêiner possa usar o sistema de arquivos Amazon EFS. As tarefas do ECS têm acesso ao mesmo sistema de arquivos do Amazon EFS, independentemente da instância de contêiner em que essas tarefas foram criadas.

1. Crie um serviço Amazon ECS com três instâncias da definição de tarefa.

**Pilha de tecnologia**
+ Amazon EC2
+ Amazon ECS
+ Amazon EFS

## Ferramentas
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/ec2/?id=docs_gateway) — A Amazon Elastic Compute Cloud (Amazon EC2) fornece capacidade de computação escalável na Nuvem AWS. Você pode usar EC2 a Amazon para lançar quantos servidores virtuais precisar e pode expandir ou aumentar a escala.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html): o Amazon Elastic Container Service (Amazon ECS) é um serviço de gerenciamento de contêineres altamente escalável e rápido para execução, interrupção e gerenciamento de contêineres em um cluster. Você pode executar tarefas e serviços em uma infraestrutura com tecnologia gerenciada pelo AWS Fargate. Como alternativa, para ter mais controle sobre sua infraestrutura, você pode executar suas tarefas e serviços em um cluster de EC2 instâncias que você gerencia.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html): o Amazon Elastic File System (Amazon EFS) fornece um sistema de arquivos NFS elástico simples, escalável, totalmente gerenciável e pronto para uso com serviços de Nuvem AWS e atributos on-premises.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): o AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto para interagir com serviços da AWS por meio de comandos em seu shell de linha de comando. Com configuração mínima, você pode executar comandos da AWS CLI que implementam funcionalidade equivalente àquela fornecida pelo Console de Gerenciamento da AWS baseado em navegador a partir de um prompt de comando.

## Épicos
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-epics"></a>

### Criar um sistema de arquivos do Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um sistema de arquivos do Amazon EFS usando o Console de Gerenciamento da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

### Crie uma definição de tarefa do Amazon ECS usando um sistema de arquivos do Amazon EFS ou a AWS CLI
<a name="create-an-amazon-ecs-task-definition-by-using-either-an-amazon-efs-file-system-or-the-aws-cli"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma definição de tarefa usando um sistema de arquivos do Amazon EFS. | Crie uma definição de tarefa usando o [novo console do Amazon ECS ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) ou o [console clássico do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition-classic.html) com as seguintes configurações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 
| Crie uma definição de tarefa usando a AWS CLI. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

## Recursos relacionados
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-resources"></a>
+ [Definições de tarefa do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Volumes do Amazon EFS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html)

## Anexos
<a name="attachments-090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/attachments/attachment.zip)

# Implantar funções do Lambda com imagens de contêiner
<a name="deploy-lambda-functions-with-container-images"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumo
<a name="deploy-lambda-functions-with-container-images-summary"></a>

AWS Lambda suporta imagens de contêineres como modelo de implantação. Esse padrão mostra como implantar funções do Lambda por meio de imagens de contêiner. 

O Lambda é um serviço de computação com tecnologia sem servidor e orientado a eventos que você pode usar para executar código para praticamente qualquer tipo de aplicativo ou serviço de backend sem provisionar ou gerenciar servidores. Com o suporte a imagens de contêiner para funções do Lambda, você obtém os benefícios de até 10 GB de armazenamento para o artefato do seu aplicativo e a capacidade de usar ferramentas familiares de desenvolvimento de imagens de contêiner.

O exemplo desse padrão usa Python como linguagem de programação subjacente, mas você pode usar outras linguagens, como Java, Node.js ou Go. Para a fonte, considere um sistema baseado em Git GitHub, como, ou Bitbucket GitLab, ou use o Amazon Simple Storage Service (Amazon S3).

## Pré-requisitos e limitações
<a name="deploy-lambda-functions-with-container-images-prereqs"></a>

**Pré-requisitos **
+ Amazon Elastic Container Registry (Amazon ECR) ativado
+ Código do aplicativo
+ Imagens do Docker com o cliente de interface de runtime e a versão mais recente do Python
+ Conhecimento prático de Git

**Limitações**
+ O tamanho máximo de imagem suportado é 10 GB.
+ O runtime máximo para uma implantação de contêiner baseado em Lambda é de 15 minutos.

## Arquitetura
<a name="deploy-lambda-functions-with-container-images-architecture"></a>

**Arquitetura de destino**

![\[Processo em quatro etapas para criar a função do Lambda.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e421cc58-d33e-493d-b0bb-c3ffe39c2eb9/images/7f36d3d8-d161-497a-b036-26d886a16c69.png)


 

1. Você cria um repositório Git e confirma o código da aplicação nele.

1. O AWS CodeBuild projeto é acionado por alterações de confirmação.

1. O CodeBuild projeto cria a imagem do Docker e publica a imagem criada no Amazon ECR.

1. Você cria a função do Lambda usando a imagem no Amazon ECR.

**Automação e escala**

Esse padrão pode ser automatizado usando AWS CloudFormation AWS Cloud Development Kit (AWS CDK), ou operações de API de um SDK. O Lambda pode ser escalado automaticamente com base no número de solicitações, e você pode ajustá-lo usando os parâmetros de simultaneidade. Para obter mais informações, consulte a[ documentação do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html).

## Ferramentas
<a name="deploy-lambda-functions-with-container-images-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)Na AWS, CloudFormationhelps você configura AWS recursos, os provisiona de forma rápida e consistente e os gerencia durante todo o ciclo de vida em Contas da AWS e. Regiões da AWS Esse padrão usa o [AWS CloudFormation Application Composer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html), que ajuda você a visualizar e editar CloudFormation modelos visualmente.
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiá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.

**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.
+ [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), e o [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) são alguns dos sistemas de controle de código-fonte baseados em Git comumente usados para acompanhar as alterações no código-fonte.

## Práticas recomendadas
<a name="deploy-lambda-functions-with-container-images-best-practices"></a>
+ Torne sua função o mais eficiente e reduzida possível para evitar o carregamento de arquivos desnecessários.
+ Esforce-se para ter camadas estáticas no topo da sua lista de arquivos do Docker e coloque as camadas que mudam com mais frequência na parte inferior. Isso melhora o armazenamento em cache, o que aumenta o desempenho.
+ O proprietário da imagem é responsável por atualizar e corrigir a imagem. Adicione essa cadência de atualização aos seus processos operacionais. Para obter mais informações, consulte a [documentação do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code).

## Épicos
<a name="deploy-lambda-functions-with-container-images-epics"></a>

### Crie um projeto em CodeBuild
<a name="create-a-project-in-codebuild"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório Git. | Crie um repositório Git para armazenar o código-fonte da aplicação, o Dockerfile e o arquivo `buildspec.yaml`.  | Desenvolvedor | 
| Crie um CodeBuild projeto. | Para usar um CodeBuild projeto para criar a imagem Lambda personalizada, faça o seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | Desenvolvedor | 
| Edite o Dockerfile. | O Dockerfile deve estar localizado no diretório de nível superior em que você está desenvolvendo o aplicativo. O código Python deve estar na pasta `src`.Ao criar imagens, use as imagens [oficiais suportadas pelo Lambda](https://gallery.ecr.aws/lambda?page=1). Caso contrário, ocorrerá um erro de bootstrap, dificultando o processo de empacotamento.Para obter detalhes, consulte a seção [Informações adicionais](#deploy-lambda-functions-with-container-images-additional). | Desenvolvedor | 
| Crie um repositório do Amazon ECR. | Crie um repositório de contêineres no Amazon ECR. No seguinte comando de exemplo, o nome do repositório criado é `cf-demo`:<pre>aws ecr create-repository --cf-demo </pre>O repositório será referenciado no arquivo `buildspec.yaml`. | Administrador da AWS, desenvolvedor | 
| Envie a imagem para o Amazon ECR. | Você pode usar CodeBuild para realizar o processo de criação de imagens. CodeBuild precisa de permissão para interagir com o Amazon ECR e trabalhar com o S3. Como parte do processo, a imagem do Docker é criada e enviada para o registro do Amazon ECR. Para obter detalhes sobre o modelo e o código, consulte a seção [Informações adicionais](#deploy-lambda-functions-with-container-images-additional). | Desenvolvedor | 
| Verifique se a imagem está no repositório. | Para verificar se a imagem está no repositório, selecione **Repositórios** no console do Amazon ECR. A imagem deve ser listada, com tags e com os resultados de um relatório de verificação de vulnerabilidade, caso esse atributo tenha sido ativado nas configurações do Amazon ECR.  Para obter mais informações, consulte a [documentação da AWS](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html). | Desenvolvedor | 

### Crie a função do Lambda para executar a imagem
<a name="create-the-lambda-function-to-run-the-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar a função do Lambda. | No console do Lambda, selecione **Criar função** e, em seguida, selecione **Imagem do contêiner**. Insira o nome da função e o URI da imagem que está no repositório do Amazon ECR e selecione **Criar função**. Para obter mais informações, consulte a [documentação do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html). | Desenvolvedor de aplicativos | 
| Testar a função do Lambda. | Para invocar e testar a função, escolha **Testar**. Para obter mais informações, consulte a [documentação do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html). | Desenvolvedor de aplicativos | 

## Solução de problemas
<a name="deploy-lambda-functions-with-container-images-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| A construção não está sendo bem-sucedida. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 

## Recursos relacionados
<a name="deploy-lambda-functions-with-container-images-resources"></a>
+ [Imagens de base para o Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html)
+ [Amostra do Docker para CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html)
+ [Passe credenciais temporárias](https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/)

## Mais informações
<a name="deploy-lambda-functions-with-container-images-additional"></a>

**Edite o Dockerfile**

O seguinte código apresenta os comandos que você edita no Dockerfile:

```
FROM public.ecr.aws/lambda/python:3.xx

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT} 
COPY requirements.txt  ${LAMBDA_TASK_ROOT} 

# install dependencies
RUN pip3 install --user -r requirements.txt

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.lambda_handler" ]
```

No comando `FROM`, utilize o valor adequado para a versão do Python compatível com o Lambda (por exemplo, `3.12`). Esta será a imagem base disponível no repositório público de imagens do Amazon ECR. 

O comando `COPY app.py ${LAMBDA_TASK_ROOT}` copia o código para o diretório raiz da tarefa, que a função do Lambda usará. Esse comando usa a variável de ambiente para que não precisemos nos preocupar com o caminho real. A função a ser executada é passada como argumento para o comando `CMD [ "app.lambda_handler" ]`.

O comando `COPY requirements.txt` captura as dependências necessárias para o código. 

O comando `RUN pip install --user -r requirements.txt` instala as dependências no diretório local do usuário. 

Para construir sua imagem, execute o seguinte comando.

```
docker build -t <image name> .
```

**Adicione a imagem no Amazon ECR**

No código a seguir, substitua `aws_account_id` pelo número da conta e substitua `us-east-1` se você estiver usando uma região diferente. O `buildspec` arquivo usa o número da CodeBuild compilação para identificar de forma exclusiva as versões da imagem como um valor de tag. Você pode alterar isso de acordo com as suas necessidades.

*O código personalizado do buildspec*

```
phases:
  install:
    runtime-versions:
       python: 3.xx
  pre_build:
    commands:
      - python3 --version
      - pip3 install --upgrade pip
      - pip3 install --upgrade awscli
      - sudo docker info
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - ls
      - cd app
      - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER .
      - docker container ls
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com
      - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
      - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
```

# Implante microsserviços Java no Amazon ECS usando o AWS Fargate
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate"></a>

*Vijay Thompson e Sandeep Bondugula, Amazon Web Services*

## Resumo
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-summary"></a>

Esse padrão fornece orientação para implantar microsserviços Java em contêineres no Amazon Elastic Container Service (Amazon ECS) usando o AWS Fargate. O padrão não usa o Amazon Elastic Container Registry (Amazon ECR) para gerenciamento de contêineres; em vez disso, as imagens do Docker são extraídas do hub do Docker. 

## Pré-requisitos e limitações
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-prereqs"></a>

**Pré-requisitos **
+ Um aplicativo de microsserviços Java existente em um hub do Docker
+ Um repositório público do Docker
+ Uma conta AWS ativa
+ Familiaridade com os serviços da AWS, incluindo Amazon ECS e Fargate
+ Estrutura Docker, Java e Spring Boot
+ Amazon Relational Database Service (Amazon RDS) instalado e em execução (opcional)
+ Uma nuvem privada virtual (VPC) se o aplicativo exigir o Amazon RDS (opcional)

## Arquitetura
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-architecture"></a>

**Pilha de tecnologia de origem**
+ Microsserviços Java (por exemplo, implementados no Spring Boot) e implantados no Docker

**Arquitetura de origem**

![\[Arquitetura de origem para microsserviços Java implantados no Docker\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/0a946ca8-fe37-4ede-85cb-a80a1c36105d.png)


**Pilha de tecnologias de destino**
+ Um cluster do Amazon ECS que hospeda cada microsserviço usando o Fargate
+ Uma rede VPC para hospedar o cluster do Amazon ECS e os grupos de segurança associados 
+ Uma cluster/task definição para cada microsserviço que gera contêineres usando o Fargate

**Arquitetura de destino**

![\[Arquitetura de destino em microsserviços Java no Amazon ECS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/b21349ea-21fc-4688-b76a-1bde479858aa.png)


## Ferramentas
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-tools"></a>

**Ferramentas**
+ O [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) elimina a necessidade de instalar e operar seu próprio software de orquestração de contêineres, gerenciar e escalar um cluster de máquinas virtuais ou programar contêineres nessas máquinas virtuais. 
+ [O 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 (Amazon). EC2 É usado em conjunto com o Amazon Elastic Container Service (Amazon ECS).
+ [Docker](https://www.docker.com/) é uma plataforma de software que permite criar, testar e implantar aplicativos rapidamente. O Docker empacota o software em unidades padronizadas chamadas *contêineres * que têm tudo o que o software precisa para ser executado, incluindo bibliotecas, ferramentas do sistema, código e runtime. 

**Código Docker**

O Dockerfile a seguir especifica a versão do Java Development Kit (JDK) usada, onde o arquivo Java (JAR) existe, o número da porta exposta e o ponto de entrada do aplicativo.

```
FROM openjdk:11
ADD target/Spring-docker.jar Spring-docker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Spring-docker.jar"]
```

## Épicos
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-epics"></a>

### Criar novas definições de tarefa
<a name="create-new-task-definitions"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma definição de tarefa. | É necessária uma definição de tarefa para executar contêineres do Docker no Amazon ECS. Abra o console do Amazon ECS em [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/), escolha **Definições de tarefas** e, em seguida, crie uma nova definição de tarefa. Para obter mais informações, consulte a [documentação do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html). | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Escolha o tipo de inicialização. | Escolha **Fargate** como o tipo de inicialização. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Configure a tarefa. | Defina um nome de tarefa e configure o aplicativo com a quantidade adequada de memória de tarefa e CPU. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Defina o contêiner. | Especifique o nome do contêiner. Para a imagem, insira o nome do site do Docker, o nome do repositório e o nome da tag da imagem do Docker (`docker.io/sample-repo/sample-application:sample-tag-name`). Defina limites de memória para o aplicativo e configure mapeamentos de portas (`8080, 80`) para as portas permitidas. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Crie a tarefa. | Quando as configurações da tarefa e do contêiner estiverem prontas, crie a tarefa. Para obter instruções detalhadas, consulte os links na seção *Recursos relacionados*. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 

### Configurar o cluster
<a name="configure-the-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar e configurar um cluster. | Escolha **Rede somente** como o tipo de cluster, configure o nome e, em seguida, crie o cluster ou use um cluster existente, se disponível. Para obter mais informações, consulte a [documentação do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html). | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 

### Configurar tarefa
<a name="configure-task"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma tarefa do . | Dentro do cluster, escolha **Executar nova tarefa**. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Escolha o tipo de inicialização. | Escolha **Fargate** como o tipo de inicialização. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Escolha a definição da tarefa, a revisão e a versão da plataforma. | Escolha a tarefa que você deseja executar, a revisão da definição da tarefa e a versão da plataforma. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Selecione o cluster. | Escolha o cluster do qual você deseja executar a tarefa. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Especifique o número de tarefas. | Configure o número de tarefas que devem ser executadas. Se você estiver iniciando com duas ou mais tarefas, é necessário um balanceador de carga para distribuir o tráfego entre as tarefas. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Especifique o grupo de tarefas. | (Opcional) Especifique um nome de grupo de tarefas para identificar um conjunto de tarefas relacionadas como um grupo de tarefas. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Configure as sub-redes e os grupos de segurança da VPC do cluster. | Configure a VPC do cluster e as sub-redes nas quais você deseja implantar a aplicação. Crie ou atualize grupos de segurança (HTTP, HTTPS e porta 8080) para fornecer acesso às conexões de entrada e saída. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Defina as configurações de IP público. | Ative ou desative o IP público, dependendo da sua necessidade em usar um endereço IP público para tarefas do Fargate. Por padrão, a opção recomendada é **Ativado**. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Revise as configurações e crie a tarefa. | Revise as configurações e, em seguida, escolha **Concluir**. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 

### Substituir
<a name="cut-over"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Copie o URL do aplicativo. | Quando o status da tarefa for atualizado para *Em execução*, selecione a tarefa. Na seção Rede, copie o IP público. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Testar seu aplicativo | No seu navegador, insira o IP público para testar o aplicativo. | Administrador de sistemas da AWS, desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-resources"></a>
+ [Noções básicas do Docker para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) (documentação do Amazon ECS)
+ [Amazon ECS no AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) (documentação do Amazon ECS)
+ [Criação de uma definição de tarefa](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) (documentação do Amazon ECS)
+ [Criação de um cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) (documentação do Amazon ECS)
+ [Configurando parâmetros básicos de serviço](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) (documentação do Amazon ECS)
+ [Configurando uma rede](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-configure-network.html) (documentação do Amazon ECS)
+ [Implantação de microsserviços Java no Amazon ECS](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/) (postagem do blog)

# Implante recursos e pacotes do Kubernetes usando o Amazon EKS e um repositório de charts do Helm no Amazon S3
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3"></a>

*Sagar Panigrahi, Amazon Web Services*

## Resumo
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-summary"></a>

Esse padrão ajuda você a gerenciar aplicativos Kubernetes com eficiência, independentemente de sua complexidade. O padrão integra o Helm aos pipelines existentes de integração e entrega contínuas (CI/CD) para implantar aplicativos em um cluster do Kubernetes. Helm é um gerenciador de pacotes Kubernetes que ajuda a gerenciar aplicativos Kubernetes. Os charts do Helm ajudam a definir, instalar e atualizar aplicativos Kubernetes complexos. Os gráficos (charts) podem ser versionados e armazenados nos repositórios do Helm, o que melhora o tempo médio de restauração (MTTR) durante interrupções. 

Esse padrão usa o Amazon Elastic Kubernetes Service (Amazon EKS) para o cluster do Kubernetes. Ele usa o Amazon Simple Storage Service (Amazon S3) como um repositório de charts do Helm, para que os gráficos possam ser gerenciados e acessados centralmente por desenvolvedores em toda a organização.

## Pré-requisitos e limitações
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa da Amazon Web Services (AWS) com uma nuvem privada virtual (VPC)
+ Um cluster do Amazon EKS 
+ Nós de trabalho configurados dentro do cluster do Amazon EKS e prontos para receber workloads
+ Kubectl para configurar o arquivo kubeconfig do Amazon EKS para o cluster de destino na máquina cliente
+ Acesso ao AWS Identity and Access Management (IAM) para criar o bucket S3
+ Acesso por IAM (programático ou por perfil) ao Amazon S3 a partir da máquina cliente
+ Gerenciamento de código-fonte e um CI/CD pipeline

**Limitações**
+ No momento, não há suporte para atualizar, excluir ou gerenciar definições de recursos personalizados ()CRDs.
+ Se você estiver usando um recurso que se refere a um CRD, o CRD deverá ser instalado separadamente (fora do gráfico).

**Versões do produto**
+ Helm v3.6.3

## Arquitetura
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-architecture"></a>

**Pilha de tecnologias de destino**
+ Amazon EKS
+ Amazon VPC
+ Amazon S3
+ Gerenciamento de código-fonte
+ Helm
+ Kubectl

**Arquitetura de destino**

![\[O cliente do Helm e o Kubectl implantam um repositório de chart do Helm no Amazon S3 para clusters do Amazon EKS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/d3f993e6-4d96-4cb9-a075-c4debe431fd7/images/2f09f7bb-440a-4c4b-b29f-08d136d1ada4.png)


 

**Automação e escala**
+ A AWS CloudFormation pode ser usada para automatizar a criação da infraestrutura. Para obter mais informações, consulte [Criação de recursos do Amazon EKS com a AWS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) na documentação do Amazon EKS.
+ O Helm deve ser incorporado à sua ferramenta de CI/CD automação existente para automatizar o empacotamento e o controle de versões dos gráficos do Helm (fora do escopo desse padrão).
+ GitVersion ou os números de compilação do Jenkins podem ser usados para automatizar o controle de versão dos gráficos.

## Ferramentas
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-tools"></a>

**Ferramentas**
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html): o Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço gerenciado para executar o Kubernetes na AWS sem a necessidade de criar ou manter seu próprio ambiente de gerenciamento do Kubernetes. O Kubernetes é um sistema de código aberto para automatizar a implantação, a escalabilidade e o gerenciamento de aplicações em contêineres.
+ [Helm](https://helm.sh/docs/): é um gerenciador de pacotes Helm para o Kubernetes que ajuda a instalar e gerenciar aplicações em seu cluster do Kubernetes.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html): o Amazon Simple Storage Service (Amazon S3) serve como armazenamento para a internet. Você pode utilizar o Amazon S3 para armazenar e recuperar qualquer volume de dados, a qualquer momento, de qualquer lugar na web.
+ [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/): o Kubectl é um utilitário de linha de comando para executar comandos em clusters do Kubernetes.

**Código **

O código de exemplo está anexado.

## Épicos
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-epics"></a>

### Configurar e inicializar o Helm
<a name="configure-and-initialize-helm"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale o cliente Helm. | Para baixar e instalar o cliente do Helm em seu sistema local, use o comando a seguir. <pre>sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</pre> | DevOps engenheiro | 
| Valide a instalação do Helm. | Para validar se o Helm é capaz de se comunicar com o servidor da API Kubernetes dentro do cluster do Amazon EKS, execute `helm version`. | DevOps engenheiro | 

### Crie e instale um chart do Helm no cluster do Amazon EKS
<a name="create-and-install-a-helm-chart-in-the-amazon-eks-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um chart do Helm para o NGINX. | Para criar um chart do Helm nomeado `my-nginx` na máquina cliente, execute `helm create my-nginx`. | DevOps engenheiro | 
| Analise a estrutura do gráfico. | Para revisar a estrutura do gráfico, execute o comando de árvore `tree my-nginx/`. | DevOps engenheiro | 
| Desative a criação de contas de serviço no gráfico. | Em `values.yaml`, abaixo da seção `serviceAccount`, defina a chave `create` como `false`. Essa opção está desativada porque não há necessidade de criar uma conta de serviço para esse padrão. | DevOps engenheiro | 
| Valide (lint) o gráfico modificado em busca de erros sintáticos. | Para validar o gráfico em busca de qualquer erro sintático antes de instalá-lo no cluster de destino, execute `helm lint my-nginx/`. | DevOps engenheiro | 
| Instale o gráfico para implantar recursos do Kubernetes. | Para executar a instalação do chart do Helm, use o comando a seguir. <pre>helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space </pre>O sinalizador opcional `debug` gera todas as mensagens de depuração durante a instalação. O sinalizador `namespace` especifica o namespace no qual a parte de recursos desse gráfico será criada. | DevOps engenheiro | 
| Revise os recursos no cluster do Amazon EKS. | Para revisar os recursos que foram criados como parte do chart do Helm no namespace `helm-space`, use o comando a seguir. <pre>kubectl get all -n helm-space</pre> | DevOps engenheiro | 

### Reverta para uma versão anterior de um aplicativo do Kubernetes
<a name="roll-back-to-a-previous-version-of-a-kubernetes-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Modifique e atualize a versão. | Para modificar o gráfico, em `values.yaml`, altere o valor de `replicaCount` para `2`. Em seguida, atualize a versão já instalada executando o seguinte comando.<pre>helm upgrade my-nginx-release my-nginx/ --namespace helm-space</pre> | DevOps engenheiro | 
| Analise o histórico de versões do Helm. | Para listar todas as revisões de uma versão específica que foram instaladas usando o Helm, execute o comando a seguir. <pre>helm history my-nginx-release</pre> | DevOps engenheiro | 
| Revise os detalhes de uma revisão específica. | Antes de mudar ou reverter para uma versão funcional e para obter uma camada adicional de validação antes de instalar uma revisão, veja quais valores foram passados para cada uma das revisões usando o comando a seguir.<pre>helm get --revision=2 my-nginx-release</pre> | DevOps engenheiro | 
| Reverta para uma versão anterior. | Para reverter para uma revisão anterior, use o comando a seguir. <pre>helm rollback my-nginx-release 1 </pre>Este exemplo está revertendo para a revisão número 1. | DevOps engenheiro | 

### Inicializar um bucket do S3 como um repositório do Helm
<a name="initialize-an-s3-bucket-as-a-helm-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um bucket do S3 para charts do Helm. | Crie um bucket exclusivo do S3. No bucket, crie uma pasta denominada `charts`. O exemplo desse padrão usa `s3://my-helm-charts/charts` como repositório do gráfico de destino. | Administrador de nuvem | 
| Instale o plug-in do Helm para o Amazon S3. | Para instalar o plug-in helm-s3 na máquina cliente, use o comando a seguir. <pre>helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0</pre>Observação: o suporte ao Helm V3 está disponível com a versão 0.9.0 e superior do plugin. | DevOps engenheiro | 
| Inicialize o repositório do Helm no Amazon S3.  | Para inicializar a pasta de destino como um repositório do Helm, use o comando a seguir. <pre>helm S3 init s3://my-helm-charts/charts </pre>O comando cria um arquivo `index.yaml` no destino para rastrear todas as informações do gráfico armazenadas nesse local. | DevOps engenheiro | 
| Adicione o repositório do Amazon S3 ao Helm. | Para adicionar o repositório na máquina cliente, use o comando a seguir.<pre>helm repo add my-helm-charts s3://my-helm-charts/charts </pre>Esse comando adiciona um alias ao repositório de destino na máquina cliente do Helm. | DevOps engenheiro | 
| Revise a lista de repositórios. | Para ver a lista de repositórios na máquina cliente do Helm, execute `helm repo list`. | DevOps engenheiro | 

### Empacote e armazene gráficos no repositório do Helm no Amazon S3
<a name="package-and-store-charts-in-the-amazon-s3-helm-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Embalar o gráfico. | Para empacotar o gráfico `my-nginx` que você criou, execute `helm package ./my-nginx/`. O comando empacota todo o conteúdo da pasta do gráfico `my-nginx` em um arquivo, que é nomeado usando o número da versão mencionado no arquivo `Chart.yaml`. | DevOps engenheiro | 
| Armazene o pacote no repositório do Helm no Amazon S3. | Para fazer o upload do pacote para o repositório do Helm no Amazon S3, execute o comando a seguir, usando o nome correto do arquivo `.tgz`.<pre>helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts</pre> | DevOps engenheiro | 
| Pesquise pelo chart do Helm. | Para confirmar se o gráfico aparece localmente e no repositório do Helm no Amazon S3, execute o comando a seguir.<pre>helm search repo my-nginx</pre> | DevOps engenheiro | 

### Modificar, criar versões e empacotar um gráfico
<a name="modify-version-and-package-a-chart"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Modificar e embalar o gráfico. | Em`values.yaml`, defina o valor `replicaCount` como `1`. Em seguida, empacote o gráfico executando `helm package ./my-nginx/`, desta vez alterando a versão de `Chart.yaml` para `0.1.1`. O controle de versão é idealmente atualizado por meio da automação usando ferramentas como GitVersion os números de compilação do Jenkins em um pipeline. CI/CD A automação do número da versão está fora do escopo desse padrão. | DevOps engenheiro | 
| Envie a nova versão para o repositório do Helm no Amazon S3. | Para enviar o novo pacote com a versão 0.1.1 para o repositório `my-helm-charts` do Helm no Amazon S3, execute o comando a seguir.<pre>helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts</pre> | DevOps engenheiro | 

### Pesquise e instale um gráfico do repositório do Helm no Amazon S3
<a name="search-for-and-install-a-chart-from-the-amazon-s3-helm-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Pesquise todas as versões do gráfico my-nginx. | Para ver todas as versões disponíveis de um gráfico, execute o comando a seguir com o sinalizador `--versions`.<pre>helm search repo my-nginx --versions</pre>Sem o sinalizador, o Helm, por padrão, exibe a versão mais recente carregada de um gráfico. | DevOps engenheiro | 
| Instale um gráfico do repositório do Helm no Amazon S3. | Os resultados da pesquisa da tarefa anterior mostram as várias versões do gráfico `my-nginx`. Para instalar a nova versão (0.1.1) do repositório do Helm no Amazon S3, use o comando a seguir.<pre>helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space</pre> | DevOps engenheiro | 

## Recursos relacionados
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-resources"></a>
+ [Documentação do HELM](https://helm.sh/docs/)
+ [Plug-in helm-s3 (licença MIT)](https://github.com/hypnoglow/helm-s3.git)
+ [Binário do cliente do HELM](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3)
+ [Documentação do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

## Anexos
<a name="attachments-d3f993e6-4d96-4cb9-a075-c4debe431fd7"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/d3f993e6-4d96-4cb9-a075-c4debe431fd7/attachments/attachment.zip)

# Implemente um cluster CockroachDB no Amazon EKS usando o Terraform
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay e Kalyan Senthilnathan, da Amazon Web Services*

## Resumo
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

[Esse padrão fornece um módulo HashiCorp Terraform para implantar um cluster [CockroachDB](https://www.cockroachlabs.com/docs/stable/) de vários nós no Amazon Elastic Kubernetes Service (Amazon EKS) usando o operador CockroachDB.](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview) O CockroachDB é um banco de dados SQL distribuído que fornece fragmentação horizontal automática, alta disponibilidade e desempenho consistente em clusters distribuídos geograficamente. Esse padrão usa o Amazon EKS como plataforma gerenciada do Kubernetes e implementa o [cert-manager](https://cert-manager.io/docs/) para comunicação de nós protegida por TLS. Ele também usa um [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) para distribuição de tráfego e cria o CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)com pods que replicam dados automaticamente para tolerância a falhas e desempenho.

**Público-alvo**

Para implementar esse padrão, recomendamos que você esteja familiarizado com o seguinte:
+ HashiCorp Conceitos do Terraform e práticas de infraestrutura como código (IaC)
+ Serviços da AWS, especialmente o Amazon EKS
+ Fundamentos do Kubernetes, incluindo operadores e StatefulSets configurações de serviços
+ Bancos de dados SQL distribuídos
+ Conceitos de segurança, como gerenciamento de certificados TLS.
+ DevOps práticas, CI/CD fluxos de trabalho e automação da infraestrutura

## Pré-requisitos e limitações
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Permissões para implantar recursos em um cluster Amazon EKS
+ Um cluster Amazon EKS versão v1.23 ou posterior, com nós rotulados `node=cockroachdb`
+ [Driver Amazon Elastic Block Store Container Storage Interface (CSI)](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) versão 1.19.0 ou posterior, instalado no cluster Amazon EKS
+ [Terraform CLI versão 1.0.0 ou posterior, instalada](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [kubectl, instalado](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ Git, [instalado](https://git-scm.com/install/)
+ AWS Command Line Interface [(AWS CLI) versão 2.9.18 ou posterior, [instalada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e configurada](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Limitações**
+ O operador CockroachDB Kubernetes não oferece suporte a vários clusters Kubernetes para implantações em várias regiões. [Para obter mais limitações, consulte [Orchestrate CockroachDB em vários clusters Kubernetes (documentação do CockroachDB) e CockroachDB Kubernetes](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks) Operator ().](https://github.com/cockroachdb/cockroach-operator) GitHub
+ A remoção automática de declarações de volume persistentes (PVCs) está atualmente desativada por padrão. Isso significa que depois de descomissionar e remover um nó, o operador não removerá o volume persistente que foi montado em seu pod. Para obter mais informações, consulte [Poda automática de PVC](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning) na documentação do CockroachDB.

**Versões do produto**
+ CockroachDB versão 22.2.2

## Arquitetura
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**Arquitetura de destino**

O diagrama a seguir mostra uma implantação altamente disponível do CockroachDB em três zonas de AWS disponibilidade em uma nuvem privada virtual (VPC). Os pods do CockroachDB são gerenciados por meio do Amazon EKS. A arquitetura ilustra como os usuários acessam o banco de dados por meio de um Network Load Balancer, que distribui o tráfego para os pods do CockroachDB. Os pods são executados em instâncias do Amazon Elastic Compute Cloud EC2 (Amazon) em cada zona de disponibilidade, o que fornece resiliência e tolerância a falhas.

![\[Uma implantação altamente disponível do CockroachDB em três zonas de disponibilidade da AWS em uma VPC.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**Recursos criados**

A implantação do módulo Terraform usado nesse padrão cria os seguintes recursos:

1. **Network Load Balancer** — Esse recurso serve como ponto de entrada para solicitações de clientes e distribui uniformemente o tráfego pelas instâncias do CockroachDB.

1. **CockroachDB StatefulSet** — StatefulSet Define o estado desejado da implantação do CockroachDB no cluster Amazon EKS. Ele gerencia a implantação, o dimensionamento e as atualizações ordenadas dos pods do CockroachDB.

1. Pods do **CockroachDB — Esses pods** são instâncias do CockroachDB em execução como contêineres nos pods do Kubernetes. Esses pods armazenam e gerenciam os dados em todo o cluster distribuído.

1. Banco de dados **CockroachDB — Esse é o banco** de dados distribuído gerenciado pelo CockroachDB, abrangendo vários pods. Ele replica dados para alta disponibilidade, tolerância a falhas e desempenho.

## Ferramentas
<a name="deploy-cockroachdb-on-eks-using-terraform-tools"></a>

**Serviços da AWS**
+ [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.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.

**Outras ferramentas**
+ O [HashiCorp Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) é uma interface de linha de comando que ajuda você na execução de comandos em clusters do Kubernetes.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [Implantar um CockroachDB no Amazon EKS usando](https://github.com/aws-samples/crdb-cluster-eks-terraform) o repositório Terraform. O repositório de código contém os seguintes arquivos e pastas para o Terraform:
+ `modules`pasta — Esta pasta contém o módulo Terraform para CockroachDB
+ `main`pasta — Essa pasta contém o módulo raiz que chama o módulo filho CockroachDB para criar o cluster de banco de dados CockroachDB.

## Práticas recomendadas
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ Não reduza para menos de três nós. Isso é considerado um antipadrão no CockroachDB e pode causar erros. Para obter mais informações, consulte [Cluster Scaling na documentação](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html) do CockroachDB.
+ Implemente o escalonamento automático do Amazon EKS usando o Karpernter ou o Cluster Autoscaler. Isso permite que o cluster CockroachDB seja escalado horizontalmente e que novos nós sejam escalados automaticamente. Para obter mais informações, consulte [Escalar a computação em cluster com o Karpenter e o Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) na documentação do Amazon EKS.
**nota**  
Devido à regra de agendamento do `podAntiAffinity` Kubernetes, somente um pod do CockroachDB pode ser programado em um nó do Amazon EKS.
+ Para obter as melhores práticas de segurança do Amazon EKS, consulte [Melhores práticas de segurança](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) na documentação do Amazon EKS.
+ Para obter as melhores práticas de desempenho do SQL para o CockroachDB, consulte as [melhores práticas de desempenho do SQL](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) na documentação do CockroachDB.
+ Para obter mais informações sobre como configurar um back-end remoto do Amazon Simple Storage Service (Amazon S3) para o arquivo de estado do Terraform, consulte Amazon [S3](https://developer.hashicorp.com/terraform/language/backend/s3) na documentação do Terraform.

## Épicos
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório de códigos. | Digite o comando a seguir para clonar o repositório:<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps engenheiro, Git | 
| Atualize as variáveis do Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps engenheiro, Terraform | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implantar a infraestrutura. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps engenheiro, Terraform | 

### Verificar a implantação
<a name="verify-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique a criação do recurso. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps engenheiro | 
| (Opcional) Aumentar ou diminuir a escala. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps engenheiro, Terraform | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua a infraestrutura. | A escalabilidade de nós para `0` reduzirá os custos de computação. No entanto, você ainda incorrerá em cobranças pelos volumes persistentes do Amazon EBS que foram criados por esse módulo. Para eliminar os custos de armazenamento, siga estas etapas para excluir todos os volumes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## Solução de problemas
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erro ao validar as credenciais do provedor | Ao executar o Terraform `apply` ou o `destroy` comando, você pode encontrar o seguinte erro:`Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.`Esse erro é causado pela expiração do token de segurança das credenciais usadas na configuração da sua máquina local. Para obter instruções sobre como resolver o erro, consulte [Definir e visualizar as configurações](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) na AWS CLI documentação. | 
| Pods do CockroachDB em estado pendente | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## Recursos relacionados
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [Implante o CockroachDB em um único cluster Kubernetes](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) (documentação do CockroachDB)
+ [Orquestre o CockroachDB em vários clusters Kubernetes (documentação do CockroachDB](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html))
+ [AWS Provedor](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (documentação do Terraform)

## Anexos
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)

# Implante um exemplo de microsserviço Java no Amazon EKS e exponha o microsserviço usando um Application Load Balancer
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer"></a>

*Vijay Thompson e Akkamahadevi Hiremath, Amazon Web Services*

## Resumo
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-summary"></a>

Esse padrão descreve como implantar um microsserviço Java de exemplo como uma aplicação em contêiner no Amazon Elastic Kubernetes Service (Amazon EKS) usando o utilitário de linha de comando `eksctl` e o Amazon Elastic Container Registry (Amazon ECR). Você pode usar um Application Load Balancer para balancear a carga do tráfego do aplicativo.

## Pré-requisitos e limitações
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ AWS Command Line Interface (AWS CLI) versão 1.7 ou mais recente, instalada e configurada no macOS, Linux ou Windows
+ Um [daemon do Docker](https://docs.docker.com/config/daemon/) em execução
+ O utilitário de linha de comando `eksctl`, instalado e configurado no macOS, Linux ou Windows (para obter mais informações, consulte [Conceitos básicos do Amazon EKS – eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) na documentação do Amazon EKS.)
+ O utilitário de linha de comando `kubectl`, instalado e configurado no macOS, Linux ou Windows (para obter mais informações, consulte [Instalar ou atualizar kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS.)

**Limitações**
+ Esse padrão não abrange a instalação de um certificado SSL para o Application Load Balancer.

## Arquitetura
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-architecture"></a>

**Pilha de tecnologias de destino**
+ Amazon ECR
+ Amazon EKS
+ Elastic Load Balancing

**Arquitetura de destino**

 O diagrama a seguir mostra uma arquitetura para a conteinerização de um microsserviço Java no Amazon EKS.

![\[Um microsserviço Java implantado como uma aplicação em contêineres no Amazon EKS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e1dd8ab0-9e1e-4d2b-b7af-89d3e583e57c/images/aaca4fd9-5aaa-4df5-aebd-02a2ed881c3b.png)


## Ferramentas
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-tools"></a>
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.
+ A ‭[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 permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ O [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui automaticamente seu tráfego de entrada entre vários destinos, como instâncias, contêineres e endereços IP do EC2 Amazon Elastic Compute Cloud (Amazon), em uma ou mais zonas de disponibilidade.
+ O [eksctl](https://eksctl.io/) ajuda você a criar clusters no Amazon EKS.
+ O [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) possibilita a execução de comandos nos clusters do Kubernetes.
+ O [Docker](https://www.docker.com/) ajuda você a criar, testar e entregar aplicativos em pacotes chamados contêineres.

## Épicos
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-epics"></a>

### Crie de um cluster do Amazon EKS usando eksctl
<a name="create-an-amazon-eks-cluster-by-using-eksctl"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um cluster do Amazon EKS.  | Para criar um cluster Amazon EKS que usa duas EC2 instâncias t2.small da Amazon como nós, execute o seguinte comando:<pre>eksctl create cluster --name <your-cluster-name> --version <version-number> --nodes=1 --node-type=t2.small</pre>O processo pode demorar entre 15 e 20 minutos. Depois que o cluster é criado, a configuração apropriada do Kubernetes é adicionada ao seu arquivo [kubeconfig](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html). Você pode usar o arquivo `kubeconfig` com `kubectl`** **para implantar o aplicativo em etapas posteriores. | Desenvolvedor, administrador do sistema | 
| Verifique o cluster do Amazon EKS. | Para verificar se o cluster foi criado e se você pode se conectar a ele, execute o comando `kubectl get nodes`. | Desenvolvedor, administrador do sistema | 

### Crie um repositório Amazon ECR e envie a imagem do Docker.
<a name="create-an-amazon-ecr-repository-and-push-the-docker-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório do Amazon ECR. | Siga as instruções em [Criar um repositório privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) na documentação do Amazon ECR. | Desenvolvedor, administrador do sistema | 
| Crie um arquivo XML POM. | Crie um arquivo `pom.xml` com base no código de *arquivo POM de exemplo* na seção [Additional information](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) desse padrão. | Desenvolvedor, administrador do sistema | 
| Criar um arquivo de origem. | Crie um arquivo de origem chamado `HelloWorld.java` no caminho `src/main/java/eksExample` com base no exemplo a seguir:<pre>package eksExample;<br />import static spark.Spark.get;<br /><br />public class HelloWorld {<br />    public static void main(String[] args) {<br />        get("/", (req, res) -> {<br />            return "Hello World!";<br />        });<br />    }<br />}</pre>Certifique-se de usar a seguinte estrutura de diretório:<pre>├── Dockerfile<br />├── deployment.yaml<br />├── ingress.yaml<br />├── pom.xml<br />├── service.yaml<br />└── src<br />    └── main<br />        └── java<br />            └── eksExample<br />                └── HelloWorld.java</pre> |  | 
| Crie um Dockerfile. | Crie um `Dockerfile` com base no código de *Exemplo de Dockerfile* na seção [Informações adicionais](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) desse padrão. | Desenvolvedor, administrador do sistema | 
| Compilar e enviar por push uma imagem do Docker | No diretório em que você deseja criar, marcar e enviar a imagem `Dockerfile` para o Amazon ECR, execute os seguintes comandos:<pre>aws ecr get-login-password --region <region>| docker login --username <username> --password-stdin <account_number>.dkr.ecr.<region>.amazonaws.com<br />docker buildx build --platform linux/amd64 -t hello-world-java:v1 .<br />docker tag hello-world-java:v1 <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1<br />docker push <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1</pre>Modifique a região da AWS, o número da conta e os detalhes do repositório nos comandos anteriores. Certifique-se de anotar a URL da imagem para uso posterior.Um sistema macOS com um chip M1 tem problemas ao criar uma imagem compatível com o Amazon EKS executado em uma plataforma. AMD64 Para resolver esse problema, use o [docker buildx](https://docs.docker.com/engine/reference/commandline/buildx/) para criar uma imagem do Docker que funcione no Amazon EKS. |  | 

### Implemente os microsserviços Java
<a name="deploy-the-java-microservices"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um arquivo de implantação.  | Crie um arquivo YAML chamado `deployment.yaml` com base no código de *arquivo de exemplo de implantação* na seção [Informações adicionais](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) desse padrão.Use o URL da imagem que você copiou anteriormente como o caminho do arquivo de imagem para o repositório do Amazon ECR. | Desenvolvedor, administrador do sistema | 
| Implante os microsserviços Java no cluster Amazon EKS.  | Para criar uma implantação em seu cluster Amazon EKS, execute o comando `kubectl apply -f deployment.yaml`. | Desenvolvedor, administrador do sistema | 
| Verifique o status dos pods. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Desenvolvedor, administrador do sistema | 
| Crie um serviço. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Desenvolvedor, administrador do sistema | 
| Instale o complemento Load Balancer Controller da AWS. | Siga as instruções de [Instalar o complemento AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) na documentação do Amazon EKS.É necessário ter o complemento instalado para criar um Application Load Balancer ou Network Load Balancer para um serviço do Kubernetes. | Desenvolvedor, administrador do sistema | 
| Crie um recurso de entrada. | Crie um arquivo YAML chamado `ingress.yaml` com base no código de *arquivo de exemplo de recurso de ingresso* na seção [Informações adicionais](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) desse padrão. | Desenvolvedor, administrador do sistema | 
| Criar um Application Load Balancer. | Para implantar o recurso de entrada e criar um Application Load Balancer, execute o comando `kubectl apply -f ingress.yaml`. | Desenvolvedor, administrador do sistema | 

### Teste a aplicação
<a name="test-the-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Teste e verifique a aplicação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Desenvolvedor, administrador do sistema | 

## Recursos relacionados
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-resources"></a>
+ [Criar um repositório privado](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) (documentação do Amazon ECR)
+ [Enviar por push uma imagem do Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (documentação do Amazon ECR)
+ [Controladores de entrada](https://www.eksworkshop.com/beginner/130_exposing-service/ingress_controller_alb/) (Amazon EKS Workshop)
+ [Docker buildx](https://docs.docker.com/engine/reference/commandline/buildx/) (documentos do Docker)

## Mais informações
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional"></a>

**Example POM file**

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>helloWorld</groupId>
  <artifactId>helloWorld</artifactId>
  <version>1.0-SNAPSHOT</version>


  <dependencies>
    <dependency>
      <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version>
        <configuration><finalName>eksExample</finalName><archive><manifest>
              <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix>
            </manifest></archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>
        <configuration><source>1.8</source><target>1.8</target></configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <goals><goal>attached</goal></goals><phase>package</phase>
            <configuration>
              <finalName>eksExample</finalName>
              <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
              <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
```

**Example Dockerfile**

```
FROM bellsoft/liberica-openjdk-alpine-musl:17

RUN apk add maven
WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567
CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
```

**Example deployment file**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: java-microservice
  template:
    metadata:
      labels:
        app.kubernetes.io/name: java-microservice
    spec:
      containers:
      - name: java-microservice-container
        image: .dkr.ecr.amazonaws.com/:
        ports:
        - containerPort: 4567
```

**Example service file**

```
apiVersion: v1
kind: Service
metadata:
  name: "service-java-microservice"
spec:
  ports:
    - port: 80
      targetPort: 4567
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: java-microservice
```

**Example ingress resource file**

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "java-microservice-ingress"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/load-balancer-name: apg2
    alb.ingress.kubernetes.io/target-type: ip
  labels:
    app: java-microservice
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "service-java-microservice"
                port:
                  number: 80
```

# Implemente um aplicativo baseado em gRPC em um cluster Amazon EKS e acesse-o com um Application Load Balancer
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar e Huy Nguyen, Amazon Web Services*

## Resumo
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-summary"></a>

Esse padrão descreve como hospedar um aplicativo baseado em gRPC em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) e acessá-lo com segurança por meio de um Application Load Balancer.

[gRPC](https://grpc.io/) é uma estrutura de chamada de procedimento remoto (RPC) de código aberto que pode ser executada em qualquer ambiente. Você pode usá-lo para integrações de microsserviços e comunicações cliente-servidor. Para obter mais informações sobre o gRPC, consulte a postagem do blog da AWS [Application Load Balancer support for end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) e gRPC.

Este padrão demonstra como hospedar uma aplicação baseada em gRPC que é executada em pods do Kubernetes no Amazon EKS. O cliente gRPC se conecta a um Application Load Balancer por meio do protocolo HTTP/2 com uma conexão criptografada. SSL/TLS O Application Load Balancer encaminha o tráfego para o aplicativo gRPC que é executado nos pods do Amazon EKS. O número de pods gRPC pode ser escalado automaticamente com base no tráfego usando o autoescalador horizontal de pods do [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html). O grupo de destino do Application Load Balancer realiza verificações de integridade nos nós do Amazon EKS, avalia se o destino está íntegro e encaminha o tráfego apenas para nós íntegros.

## Pré-requisitos e limitações
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ [Docker](https://www.docker.com/), instalado e configurado no Linux, macOS ou Windows
+ [AWS Command Line Interface (AWS CLI) versão 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), instalado e configurado no Linux, macOS ou Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), instalado e configurado no Linux, macOS ou Windows.
+ `kubectl`, instalado e configurado para acessar recursos em seu cluster Amazon EKS. Para obter mais informações, consulte [Instalação ou atualização do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), instalado e configurado.
+ Um cluster do Amazon EKS, novo ou existente. Para obter mais informações, consulte [Conceitos básicos do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).
+ Seu terminal de computador configurado para acessar o cluster do Amazon EKS. Para obter mais informações, consulte [Configurar o computador para se comunicar com seu cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) na documentação do Amazon EKS.
+ [Controlador do AWS Load Balancer](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), provisionado no cluster Amazon EKS.
+ Um nome de host DNS existente com um SSL ou SSL/TLS certificado válido. É possível obter um certificado para seu domínio usando o AWS Certificate Manager (ACM) ou fazendo upload de um certificado existente para o ACM. Para obter mais informações sobre essas duas opções, consulte [Solicitação de um certificado público](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) e [Importação de certificados para o AWS Certificate Manager na documentação](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) do ACM.

## Arquitetura
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-architecture"></a>

O diagrama apresentado a seguir ilustra a arquitetura implementada por este padrão.

![\[Arquitetura para aplicação baseada em gRPC no Amazon EKS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

O diagrama a seguir mostra um fluxo de trabalho em que o SSL/TLS tráfego é recebido de um cliente gRPC que é transferido para um Application Load Balancer. O tráfego é encaminhado em texto simples para o servidor gRPC porque é proveniente de uma nuvem privada virtual (VPC).

![\[Fluxo de trabalho para enviar SSL/TLS tráfego para um servidor gRPC\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


## Ferramentas
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-tools"></a>

**Serviços da AWS**
+ O ‭[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 permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, é possível distribuir o tráfego entre instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud (Amazon EC2) em uma ou mais Zonas de disponibilidade.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável. 
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.  

**Ferramentas**
+ O [eksctl](https://eksctl.io/) é uma ferramenta simples de CLI para criar clusters no Amazon EKS.
+ O [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): é um utilitário de linha de comando para executar comandos em clusters do Kubernetes.
+ O [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) ajuda a gerenciar AWS Elastic Load Balancers para um cluster do Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) é uma ferramenta de linha de comando que ajuda você a interagir com os serviços gRPC.

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

## Épicos
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-epics"></a>

### Crie e envie a imagem do Docker do servidor gRPC para o Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um repositório do Amazon ECR. | Faça login no Console de Gerenciamento da AWS, abra o [console do Amazon ECR](https://console.aws.amazon.com/ecr/) e, em seguida, crie um repositório do Amazon ECR. Para obter mais informações, consulte [Criar um repositório](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) na documentação do Amazon ECR. Certifique-se de registrar a URL do repositório Amazon ECR.Você também pode criar um repositório Amazon ECR com a AWS CLI executando o seguinte comando:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Administrador de nuvem | 
| Crie a imagem do Docker.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps engenheiro | 
| Envie a imagem do Docker para o Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps engenheiro | 

### Implemente os manifestos do Kubernetes no cluster Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Modifique os valores no arquivo de manifesto do Kubernetes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps engenheiro | 
| Implemente o arquivo manifesto do Kubernetes.  | Implante o arquivo `grpc-sample.yaml` no cluster do Amazon EKS executando o seguinte comando do `kubectl`: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps engenheiro | 

### Crie o registro DNS para o FQDN do Application Load Balancer
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Registre o FQDN do Application Load Balancer | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps engenheiro | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Teste o servidor gRPC.  | Use g RPCurl para testar o endpoint executando o seguinte comando:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>Substitua `grpc.example.com` pelo seu nome de DNS. | DevOps engenheiro | 
| Teste o servidor gRPC usando um cliente gRPC.  | No cliente gRPC de amostra `helloworld_client_ssl.py`, substitua o nome do host `grpc.example.com` pelo nome do host usado para o servidor gRPC.  O exemplo de código a seguir mostra a resposta do servidor gRPC para a solicitação do cliente:<pre>python ./app/helloworld_client_ssl.py<br />message: "Hello to gRPC server from Client"<br /><br />message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\""<br />received: true</pre>Isso mostra que o cliente pode conversar com o servidor e que a conexão foi bem-sucedida. | DevOps engenheiro | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Remova o registro de DNS. | Remova o registro de DNS que direciona para o FQDN do Application Load Balancer que você criou anteriormente.  | Administrador de nuvem | 
| Remova o balanceador de carga. | No [console do Amazon EC2](https://console.aws.amazon.com/ec2/), escolha **Balanceadores de Carga** e, em seguida, remova o balanceador de carga que o controlador do Kubernetes criou para seu recurso de entrada. | Administrador de nuvem | 
| Exclua o cluster do Amazon EKS. | Exclua o cluster do Amazon EKS usando o `eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Recursos relacionados
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Balanceamento de carga da rede no Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Grupos de destino para seus Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

## Mais informações
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-additional"></a>

**Exemplo de recurso de entrada:**

```
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/backend-protocol-version: "GRPC"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID>
  labels:
    app: grpcserver
    environment: dev
  name: grpcserver
  namespace: grpcserver
spec:
  ingressClassName: alb
  rules:
  - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM
    http:
      paths:
      - backend:
          service:
            name: grpcserver
            port:
              number: 9000
        path: /
        pathType: Prefix
```

**Exemplo de recurso de implantação:**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: grpcserver
spec:
  selector:
    matchLabels:
      app: grpcserver
  replicas: 1
  template:
    metadata:
      labels:
        app: grpcserver
    spec:
      containers:
      - name: grpc-demo
        image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0   #<------- Change to the URI that the Docker image is pushed to
        imagePullPolicy: Always
        ports:
        - name: grpc-api
          containerPort: 9000
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      restartPolicy: Always
```

**Exemplo de saída:**

```
NAME             CLASS           HOSTS                          Address                PORTS          AGE
 grpcserver      <none>      <DNS-HostName>                  <ELB-address>              80            27d
```

# Implante aplicativos em contêineres em AWS IoT Greengrass V2 execução como um contêiner Docker
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container"></a>

*Salih Bakir, Giuseppe Di Bella e Gustav Svalander, da Amazon Web Services*

## Resumo
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-summary"></a>

AWS IoT Greengrass Version 2, quando implantado como um contêiner Docker, não oferece suporte nativo à execução de contêineres de aplicativos Docker. Esse padrão mostra como criar uma imagem de contêiner personalizada com base na versão mais recente AWS IoT Greengrass V2 que habilita a funcionalidade Docker-in-Docker (DiND). Com o DiND, você pode executar aplicativos em contêineres dentro do ambiente. AWS IoT Greengrass V2 

Você pode implantar esse padrão como uma solução independente ou integrá-lo a plataformas de orquestração de contêineres, como o Amazon ECS Anywhere. Em qualquer modelo de implantação, você mantém a AWS IoT Greengrass V2 funcionalidade completa, incluindo os recursos de processamento do AWS IoT SiteWise Edge, ao mesmo tempo em que permite implantações escaláveis baseadas em contêineres. 

## Pré-requisitos e limitações
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Para AWS IoT Greengrass Version 2 pré-requisitos gerais, consulte [Pré-requisitos](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started-prerequisites.html) na documentação. AWS IoT Greengrass Version 2 
+ Docker Engine, instalado e configurado no Linux, macOS ou Windows.
+ Docker Compose (se você usar a interface de linha de comando (CLI) do Docker Compose para executar imagens do Docker).
+ Um sistema operacional Linux.
+ Um hipervisor com um servidor host que oferece suporte à virtualização.
+ Requisitos do sistema:
  + 2 GB de RAM (mínimo)
  + 5 GB de espaço em disco disponível (mínimo)
  + Para o AWS IoT SiteWise Edge, uma CPU quad-core x86\$164 com 16 GB de RAM e 50 GB de espaço em disco disponível. Para obter mais informações sobre processamento de AWS IoT SiteWise dados, consulte [Requisitos do pacote de processamento de dados](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-gateway-ggv2.html#w2aac17c19c13b7) na AWS IoT SiteWise documentação.

**Versões do produto**
+ AWS IoT Greengrass Version 2 versão 2.5.3 ou posterior
+ Docker-in-Docker versão 1.0.0 ou posterior
+ Docker Compose versão 1.22 ou posterior
+ Docker Engine versão 20.10.12 ou posterior

**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 [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="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-architecture"></a>

**Pilha de tecnologias de destino**
+ **Fontes de dados** — dispositivos de IoT, sensores ou equipamentos industriais que geram dados para processamento
+ **AWS IoT Greengrass V2**— Funcionando como um contêiner Docker com D-in-D recursos, implantado em infraestruturas de ponta
+ Aplicativos em **contêineres — aplicativos** personalizados executados no AWS IoT Greengrass V2 ambiente como contêineres Docker aninhados
+ **(Opcional) Amazon ECS** Anywhere — orquestração de contêineres que gerencia a implantação do contêiner AWS IoT Greengrass V2 
+ **Outros Serviços da AWS** — AWS IoT Core, AWS IoT SiteWise, e outros Serviços da AWS para processamento e gerenciamento de dados

**Arquitetura de destino**

O diagrama a seguir mostra um exemplo de arquitetura de implantação de destino que usa o Amazon ECS Anywhere, que é uma ferramenta de gerenciamento de contêineres.

![\[Arquitetura de implantação usando o Amazon ECS Anywhere.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/2ecf5354-40e0-4fd9-9798-086719059784/images/5ed2652e-9604-4809-8962-b167e1991658.png)


O diagrama mostra o seguinte fluxo de trabalho:

**1: Armazenamento de imagens de contêineres** — O Amazon ECR armazena as imagens de AWS IoT Greengrass contêineres e quaisquer contêineres de aplicativos personalizados necessários para o processamento de bordas.

**2** e **3: Implantação de contêineres** — O Amazon ECS Anywhere implanta a imagem AWS IoT Greengrass do contêiner do Amazon ECR no ponto de presença, gerenciando o ciclo de vida do contêiner e o processo de implantação.

**4: Implantação de componentes** — O AWS IoT Greengrass núcleo implantado implanta automaticamente seus componentes relevantes com base em sua configuração. Os componentes incluem o AWS IoT SiteWise Edge e outros componentes necessários de processamento de borda dentro do ambiente em contêineres.

**5: Ingestão de dados** — Depois de totalmente configurado, AWS IoT Greengrass começa a ingerir dados de telemetria e sensores de várias fontes de dados de IoT no ponto de borda.

**6: Processamento de dados e integração na nuvem** — O AWS IoT Greengrass núcleo conteinerizado processa os dados localmente usando seus componentes implantados (incluindo o AWS IoT SiteWise Edge para dados industriais). Em seguida, ele envia os dados processados aos Nuvem AWS serviços para análise e armazenamento adicionais.

## Ferramentas
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-tools"></a>

**Serviços da AWS**
+ [O Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch-type-external.html) Anywhere ajuda você a implantar, usar e gerenciar tarefas e serviços do Amazon ECS em sua própria infraestrutura.
+ [O Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) fornece capacidade de computação escalável no. Nuvem AWS Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html) é um serviço de nuvem e runtime de borda da Internet das Coisas (IoT) de código aberto que ajuda você a criar, implantar e gerenciar aplicações de IoT em seus dispositivos.
+ O [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html) auxilia na coleta, na modelagem, na análise e na visualização de dados de equipamentos industriais em grande escala.

**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 [Docker Compose](https://docs.docker.com/compose/) é uma ferramenta para definir e executar aplicações com diversos contêineres.
+ [O Docker Engine](https://docs.docker.com/engine/) é uma tecnologia de conteinerização de código aberto para criar e armazenar aplicativos.

**Repositório de código**

O código desse padrão está disponível no Docker-in-Docker repositório GitHub [AWS IoT Greengrass v2](https://github.com/aws-samples/aws-iot-greengrass-docker-in-docker).

## Épicos
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-epics"></a>

### Crie a AWS IoT Greengrass V2 Docker-in-Docker imagem
<a name="build-the-gg2-docker-in-docker-image"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone e navegue até o repositório. | Para clonar o repositório, use o seguinte comando: `git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git`Para navegar até o `docker` diretório, use o seguinte comando:`cd aws-iot-greengrass-v2-docker-in-docker/docker` | DevOps engenheiro, AWS DevOps | 
| Crie a imagem do Docker. | Para criar a imagem do Docker com a versão padrão (mais recente), execute o seguinte comando:`docker build -t x86_64/aws-iot-greengrass:latest .`Ou, para criar a imagem do Docker com uma versão específica, execute o seguinte comando:`docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .`Para verificar a compilação, execute o seguinte comando:`docker images \| grep aws-iot-greengrass`  | AWS DevOps, DevOps engenheiro, desenvolvedor de aplicativos | 
| (Opcional) Envie para o Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Desenvolvedor de aplicativos, AWS DevOps, DevOps engenheiro | 

### Configurar AWS credenciais
<a name="configure-aws-credentials"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Selecione o método de autenticação. | Escolha uma das seguintes opções:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrador da AWS | 
| Configure o método de autenticação. | Para o método de autenticação selecionado, use as seguintes diretrizes de configuração:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrador da AWS | 

### Execute com o Docker Compose
<a name="run-with-docker-compose"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure `docker-compose.yml`. | Atualize o `docker-compose.yml` arquivo com as variáveis de ambiente da seguinte forma:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps engenheiro | 
| Inicie e verifique o contêiner. | Para começar em primeiro plano, execute o seguinte comando:`docker-compose up --build`Ou, para começar em segundo plano, execute o seguinte comando:`docker-compose up --build -d`Para verificar o status, execute o seguinte comando:`docker-compose ps`Para monitorar os registros, execute o seguinte comando:`docker-compose logs -f` | DevOps engenheiro | 

### Execute com o Docker CLI
<a name="run-with-docker-cli"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute o contêiner com a CLI do Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps engenheiro | 
| Verifique o contêiner. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps engenheiro | 

### Gerencie aplicativos em contêineres
<a name="manage-containerized-applications"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implemente aplicativos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Desenvolvedor de aplicativos | 
| Acesse e teste Docker-in-Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps engenheiro | 

### (Opcional) Integre com o Amazon ECS Anywhere
<a name="optional-integrate-with-ecs-anywhere"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o cluster Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrador da AWS | 
| Implante a tarefa do Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrador da AWS | 

### Pare e limpe
<a name="stop-and-cleanup"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Pare o contêiner. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps engenheiro | 

## Solução de problemas
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O contêiner não inicia com erros de permissão. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)`--privileged`concede privilégios estendidos ao contêiner. | 
| O provisionamento falha com erros de credencial. | Para verificar se as credenciais estão configuradas corretamente, use as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Certifique-se de que as permissões do IAM incluam `iot:CreateThing` `iot:CreatePolicy``iot:AttachPolicy`,`iam:CreateRole`,, `iam:AttachRolePolicy` e. | 
| Não é possível conectar-se ao daemon do Docker dentro do contêiner. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| O contêiner fica sem espaço em disco. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Garanta espaço mínimo em disco: 5 GB para operações básicas e 50 GB para o AWS IoT SiteWise Edge | 
| Problemas de construção. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Problemas de conectividade de rede. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Verifique se o firewall permite tráfego de saída HTTPS (443) e MQTT (8883). | 
| Os componentes do Greengrass falham na implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Verifique os registros específicos do componente no `/greengrass/v2/logs/` diretório. | 
| O contêiner sai imediatamente após o início. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Verifique se todas as variáveis de ambiente necessárias estão definidas corretamente se`PROVISION=true`. Certifique-se de que o `--init` sinalizador seja usado ao iniciar o contêiner. | 

## Recursos relacionados
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-resources"></a>

**AWS recursos**
+ [Amazon Elastic Container Service](https://aws.amazon.com/ecs/)
+ [Configure o processamento de dados AWS IoT SiteWise periféricos para modelos e ativos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/edge-processing.html)
+ [O que é AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)

**Outros recursos**
+ [Documentação do Docker](https://docs.docker.com/)

## Mais informações
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-additional"></a>
+ Para o processamento de dados do AWS IoT SiteWise Edge, o Docker deve estar disponível no AWS IoT Greengrass ambiente.
+ Para executar um contêiner aninhado, você deve executar o AWS IoT Greengrass contêiner com credenciais de nível de administrador.

# Implantar contêineres usando o Elastic Beanstalk
<a name="deploy-containers-by-using-elastic-beanstalk"></a>

*Thomas Scott e Jean-Baptiste Guillois, Amazon Web Services*

## Resumo
<a name="deploy-containers-by-using-elastic-beanstalk-summary"></a>

Na Nuvem da Amazon Web Services (AWS), o AWS Elastic Beanstalk oferece suporte ao Docker como uma plataforma disponível, para que os contêineres possam ser executados com o ambiente criado. Esse padrão mostra como implantar contêineres usando o serviço Elastic Beanstalk. A implantação desse padrão usará o ambiente de servidor web baseado na plataforma Docker.

Para usar o Elastic Beanstalk para implantar e escalar aplicativos e serviços web, você carrega seu código e a implantação é tratada automaticamente. Provisionamento de capacidade, balanceamento de carga, ajuste de escala automático e monitoramento da integridade do aplicativo também estão incluídos. Ao usar o Elastic Beanstalk, você pode assumir o controle total sobre os recursos da AWS que ele cria em seu nome. Não há custo adicional para o Elastic Beanstalk. Você paga apenas pelos recursos da AWS que são usados para armazenar e executar seus aplicativos.

Esse padrão inclui instruções para implantação usando a [Interface de linhas de comandos do AWS Elastic Beanstalk (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html) e o Console de Gerenciamento da AWS.

**Casos de uso**

Os casos de uso do Elastic Beanstalk incluem: 
+ Implementar um ambiente de protótipo para demonstrar um aplicativo de frontend. (Esse padrão usa um Dockerfile** **como exemplo.)
+ Implantar uma API para lidar com solicitações de API para um determinado domínio.
+ Implante uma solução de orquestração usando o Docker-Compose (`docker-compose.yml` não** **é usado como exemplo prático nesse padrão).

## Pré-requisitos e limitações
<a name="deploy-containers-by-using-elastic-beanstalk-prereqs"></a>

**Pré-requisitos **
+ Uma conta da AWS
+ AWS EB CLI instalada localmente
+ Docker instalado em uma máquina local

**Limitações**
+ Há um limite de extração do Docker de 100 pulls por seis horas por endereço IP no plano gratuito.

## Arquitetura
<a name="deploy-containers-by-using-elastic-beanstalk-architecture"></a>

**Pilha de tecnologias de destino**
+ Instâncias do Amazon Elastic Compute Cloud (Amazon EC2)
+ Grupo de segurança
+ Application Load Balancer
+ Auto Scaling group (Grupo do Auto Scaling)

**Arquitetura de destino**

![\[Arquitetura para a implantação de contêineres com o Elastic Beanstalk.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/dfabcdc2-747f-40e2-a603-08ea31ba71d3/images/1d17ff09-1aea-4c72-adb5-eaf741601428.png)


**Automação e escala**

O AWS Elastic Beanstalk pode escalar automaticamente com base no número de solicitações feitas. Os recursos da AWS criados para um ambiente incluem um Application Load Balancer, um grupo de Auto Scaling e uma ou mais instâncias da Amazon. EC2  

O balanceador de carga fica na frente das EC2 instâncias da Amazon, que fazem parte do grupo Auto Scaling. O Amazon EC2 Auto Scaling inicia automaticamente EC2 instâncias adicionais da Amazon para acomodar o aumento da carga em seu aplicativo. Se a carga em seu aplicativo diminuir, o Amazon EC2 Auto Scaling interrompe as instâncias, mas mantém pelo menos uma instância em execução.

**Triggers de ajuste de escala automático**

O grupo Auto Scaling em seu ambiente do Elastic Beanstalk usa dois CloudWatch alarmes da Amazon para iniciar operações de escalabilidade. Os triggers padrão são dimensionados quando a média de tráfego de rede de saída de cada instância é mais alta que 6 MB ou mais baixa que 2 MB durante um período de cinco minutos. Para usar o Amazon EC2 Auto Scaling de forma eficaz, configure gatilhos apropriados para seu aplicativo, tipo de instância e requisitos de serviço. Você pode dimensionar com base em várias estatísticas, incluindo latência, E/S de disco, utilização de CPU e a contagem de solicitações. Para obter mais informações, consulte [Triggers de ajuste de escala automático](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-autoscaling-triggers.html).

## Ferramentas
<a name="deploy-containers-by-using-elastic-beanstalk-tools"></a>

**Serviços da AWS**
+ A ‭[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 permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ A [AWS EB Command Line Interface (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) é um cliente de linha de comando que você pode usar para criar, configurar e gerenciar ambientes do Elastic Beanstalk.
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, você pode distribuir tráfego entre instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud (Amazon EC2) em uma ou mais zonas de disponibilidade.

**Outros serviços**
+ O [Docker](https://www.docker.com/) empacota o software em unidades padronizadas chamadas contêineres que incluem bibliotecas, ferramentas do sistema, código e runtime.

**Código **

O código desse padrão está disponível no repositório GitHub [Cluster Sample Application](https://github.com/aws-samples/cluster-sample-app).

## Épicos
<a name="deploy-containers-by-using-elastic-beanstalk-epics"></a>

### Compile com um Dockerfile
<a name="build-with-a-dockerfile"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório remoto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Inicialize o projeto Elastic Beanstalk Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Teste o projeto localmente | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 

### Implante usando a EB CLI
<a name="deploy-using-eb-cli"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute o comando de implantação | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Acesse a versão implantada. | Depois que o comando de implantação for concluído, acesse o projeto usando o comando `eb open`. | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 

### Implante usando o console
<a name="deploy-using-the-console"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante o aplicativo usando o navegador. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Acesse a versão implantada. | Após a implantação, acesse o aplicativo implantado e escolha a URL fornecida. | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 

## Recursos relacionados
<a name="deploy-containers-by-using-elastic-beanstalk-resources"></a>
+ [Ambientes de servidor da web](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-webserver.html)
+ [Instalar a EB CLI no macOS](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-osx.html)
+ [Instalar a CLI do EB manualmente](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)

## Mais informações
<a name="deploy-containers-by-using-elastic-beanstalk-additional"></a>

**Vantagens de usar o Elastic Beanstalk**
+ Provisionamento automático da infraestrutura
+ Gerenciamento automático da plataforma subjacente
+ Correções e atualizações automáticas para oferecer suporte ao aplicativo
+ Ajuste de escala automático da aplicação
+ Capacidade de personalizar o número de nós
+ Capacidade de acessar os componentes da infraestrutura, se necessário
+ Facilidade de implantação em relação a outras soluções de implantação de contêineres

# Gere um endereço IP de saída estático usando uma função do Lambda, Amazon VPC e uma arquitetura de tecnologia sem servidor
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture"></a>

*Thomas Scott, Amazon Web Services*

## Resumo
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-summary"></a>

Esse padrão descreve como gerar um endereço IP de saída estático na Nuvem da Amazon Web Services (AWS) usando uma arquitetura de tecnologia sem servidor. Sua organização pode se beneficiar dessa abordagem se quiser enviar arquivos para uma entidade comercial separada usando o Secure File Transfer Protocol (SFTP). Isso significa que a entidade comercial deve ter acesso a um endereço IP que permita que os arquivos passem pelo firewall. 

A abordagem do padrão orienta a criação de uma função do AWS Lambda que usa um [endereço IP elástico](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) como o endereço IP para tráfego de saída. Seguindo as etapas desse padrão, você pode criar uma função do Lambda e uma nuvem privada virtual (VPC) que roteia o tráfego de saída por meio de um gateway da Internet com um endereço IP estático. Para usar o endereço IP estático, você anexa a função do Lambda à VPC e suas sub-redes. 

## Pré-requisitos e limitações
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa 
+ Permissões do AWS Identity and Access Management (IAM) para criar e implementar uma função do Lambda e criar uma VPC e suas sub-redes. Para obter mais informações, consulte [Função de execução e permissões de usuário](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions) na documentação da AWS Lambda.
+ Se você planeja usar infraestrutura como código (IaC) para implementar a abordagem apresentada neste padrão, será necessário um ambiente de desenvolvimento integrado (IDE), como o AWS Cloud9. Para obter mais informações sobre isso, consulte [O que é o AWS Cloud9?](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html) na documentação do AWS Cloud9.

## Arquitetura
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-architecture"></a>

O diagrama a seguir mostra a arquitetura de tecnologia sem servidor desse padrão.

![\[Nuvem AWS VPC architecture with two availability zones, public and private subnets, NAT gateways, and a Lambda function.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/eb1d0b05-df33-45ae-b27e-36090055b300/images/c15cc6da-ce4e-4ea0-9feb-de1c845d3ce8.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O tráfego de saída de `NAT gateway 1` em `Public subnet 1`.

1. O tráfego de saída de `NAT gateway 2` em `Public subnet 2`.

1. A função do Lambda pode ser executada em `Private subnet 1` ou `Private subnet 2`.

1. `Private subnet 1` e `Private subnet 2` roteiam o tráfego para os gateways NAT nas sub-redes públicas.

1. Os gateways NAT enviam tráfego de saída para o gateway da Internet a partir das sub-redes públicas.

1. Os dados de saída são transferidos do gateway da Internet para o servidor externo.



**Pilha de tecnologia**
+ Lambda
+ Amazon Virtual Private Cloud (Amazon VPC)

 

**Automação e escala**

Você pode garantir a alta disponibilidade (HA) usando duas sub-redes públicas e duas privadas em diferentes zonas de disponibilidade. Mesmo que uma zona de disponibilidade fique indisponível, a solução do padrão continua funcionando.

## Ferramentas
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-tools"></a>
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): o AWS Lambda é um serviço de computação que permite a execução do código sem provisionar ou gerenciar servidores O Lambda executa o código somente quando necessário e dimensiona automaticamente, desde algumas solicitações por dia até milhares por segundo. Você paga apenas pelo tempo de computação consumido. Não haverá cobranças quando o código não estiver em execução.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/): a Amazon Virtual Private Cloud (Amazon VPC) permite provisionar uma seção logicamente isolada da Nuvem AWS, em que é possível executar recursos da AWS em uma rede virtual que você mesmo define. Essa rede virtual se assemelha a uma rede tradicional que você operaria no seu datacenter, com os benefícios de usar a infraestrutura dimensionável da AWS.

## Épicos
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-epics"></a>

### Crie uma nova VPC
<a name="create-a-new-vpc"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma nova VPC. | Faça login no AWS Management Console, abra o console Amazon VPC e crie uma VPC chamada `Lambda VPC` que tenha `10.0.0.0/25`**** como intervalo CIDR. IPv4 Para obter mais informações sobre como criar uma VPC, consulte [Conceitos básicos da Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc) na documentação da Amazon VPC.  | Administrador da AWS | 

### Crie duas sub-redes públicas
<a name="create-two-public-subnets"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie a primeira sub-rede pública. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Crie a segunda sub-rede pública. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 

### Criar duas sub-redes privadas
<a name="create-two-private-subnets"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar a primeira sub-rede privada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Crie a segunda sub-rede privada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 

### Criar um endereço IP elástico para o seu gateway NAT
<a name="create-two-elastic-ip-addresses-for-your-nat-gateways"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Crie o primeiro endereço IP elástico. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Este endereço IP elástico é empregado em seu primeiro gateway NAT.  | Administrador da AWS | 
| Crie o segundo endereço IP elástico. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Este endereço IP elástico é empregado em seu segundo gateway NAT. | Administrador da AWS | 

### Criar um gateway da Internet
<a name="create-an-internet-gateway"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um gateway da Internet. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Anexar o Gateway da Internet à VPC. | Selecione o gateway da internet criado e escolha **Actions, Attach to VPC (Ações, anexar à VPC)**. | Administrador da AWS | 

### Crie dois gateways NAT
<a name="create-two-nat-gateways"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o primeiro gateway NAT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Crie o segundo gateway NAT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 

### Crie tabelas de rotas para suas sub-redes públicas e privadas
<a name="create-route-tables-for-your-public-and-private-subnets"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie a tabela de rotas para a sub-rede pública. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Crie a tabela de rotas para a sub-rede pública dois. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Crie a tabela de rotas para a sub-rede privada-um. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Crie a tabela de rotas para a sub-rede privada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 

### Crie a função do Lambda, adicione-a à VPC e teste a solução
<a name="create-the-lambda-function-add-it-to-the-vpc-and-test-the-solution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma nova função do Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Adicione a função do Lambda ao seu VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 
| Escreva o código para chamar um serviço externo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrador da AWS | 

## Recursos relacionados
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-resources"></a>
+ [Configurar uma função do Lambda para acessar recursos em uma VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)

# Identificação automática de imagens de contêineres duplicadas ao migrar para um repositório do Amazon ECR
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav e Rishi Singla, Amazon Web Services*

## Resumo
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-summary"></a>

O padrão fornece uma solução automatizada para identificar se as imagens armazenadas em diferentes repositórios de contêineres são duplicadas. Essa verificação é útil quando você planeja migrar imagens de outros repositórios de contêiner para o Amazon Elastic Container Registry (Amazon ECR).

Para obter informações básicas, o padrão também descreve os componentes de uma imagem de contêiner, como o resumo da imagem, o manifesto e as marcações. Ao planejar uma migração para o Amazon ECR, você pode decidir sincronizar suas imagens de contêiner em todos os registros de contêineres comparando os resumos das imagens. Antes de migrar suas imagens de contêiner, você precisa verificar se essas imagens já existem no repositório do Amazon ECR para evitar duplicações. No entanto, pode ser difícil detectar duplicações comparando resumos de imagens, o que pode causar problemas na fase inicial de migração.  Este padrão compara os resumos de duas imagens semelhantes que estão armazenadas em diferentes registros de contêineres e explica por que os resumos variam, para ajudar você a comparar imagens com precisão.

## Pré-requisitos e limitações
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ Um ativo Conta da AWS
+ Acesso ao [registro público do Amazon ECR](https://gallery.ecr.aws/)
+ Familiaridade com o seguinte: Serviços da AWS
  + [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  + [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  + [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  + [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
  + [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/)
+  CodeCommit Credenciais configuradas (consulte [as instruções](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html))

## Arquitetura
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-architecture"></a>

**Componentes de imagem de contêiner**

O diagrama a seguir ilustra alguns dos componentes de uma imagem de contêiner. Esses componentes são descritos após o diagrama.

![\[Manifesto, configuração, camadas do sistema de arquivos e resumos.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**Termos e definições**

Os termos a seguir são definidos na [Open Container Initiative (OCI) Image Specification](https://github.com/opencontainers/image-spec/blob/main/spec.md).
+ **Registro:** um serviço para armazenamento e gerenciamento de imagens.
+ **Cliente:** uma ferramenta que se comunica com registros e trabalha com imagens locais.
+ **Push:** o processo de upload de imagens para um registro.
+ **Pull:** o processo para baixar imagens de um registro.
+ **Blob:** a forma binária de conteúdo que é armazenada por um registro e pode ser tratada por um resumo.
+ **Índice:** um constructo que identifica vários manifestos de imagem para diferentes plataformas de computador (como x86-64 ou ARM de 64 bits) ou tipos de mídia. Para obter mais informações, consulte a [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/main/image-index.md).
+ **Manifesto:** um documento JSON que define uma imagem ou artefato que é carregado por meio do endpoint do manifesto. Um manifesto pode fazer referência a outros blobs em um repositório usando descritores. Para obter mais informações, consulte a [OCI Image Manifest Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md).
+ **Camada do sistema de arquivos:** bibliotecas do sistema e outras dependências de uma imagem.
+ **Configuração:** um blob que contém metadados de artefatos e é referenciado no manifesto. Para obter mais informações, consulte a [OCI Image Configuration Specification](https://github.com/opencontainers/image-spec/blob/main/config.md).
+ **Objeto ou artefato:** um item de conteúdo conceitual armazenado como um blob e associado a um manifesto anexo com uma configuração.
+ **Digest:** um identificador exclusivo criado com base em um hash criptográfico do conteúdo de um manifesto. O resumo da imagem ajuda a identificar de forma exclusiva uma imagem de contêiner imutável. Ao extrair uma imagem usando seu resumo, você baixará a mesma imagem todas as vezes em qualquer sistema operacional ou arquitetura. Para obter mais informações, consulte a [OCI Image Specification](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+ **Tag:** um identificador de manifesto legível por humanos. Em comparação com os resumos de imagens, que são imutáveis, as marcações são dinâmicas. Uma marcação que aponta para uma imagem pode mudar e passar de uma imagem para outra, embora o resumo da imagem subjacente permaneça o mesmo.

**Arquitetura de destino**

O diagrama a seguir mostra a arquitetura de alto nível da solução fornecida por esse padrão para identificar imagens de contêineres duplicadas comparando imagens armazenadas no Amazon ECR e em repositórios privados.

![\[Detecção automática de duplicatas com e. CodePipeline CodeBuild\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


## Ferramentas
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-tools"></a>

**Serviços da 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.
+ O [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ O [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) é um serviço de controle de versão que ajuda no armazenamento e no gerenciamento de repositórios Git de forma privada, sem a necessidade de administrar o próprio sistema de controle de origem.
+ O [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) ajuda você a modelar e configurar rapidamente os diferentes estágios de uma versão de software, além de automatizar as etapas necessárias para a implantação contínua de alterações.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.

**Código **

O código desse padrão está disponível na [solução**** automatizada do GitHub repositório para identificar imagens de contêineres duplicadas entre](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) repositórios.

## Práticas recomendadas
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-best-practices"></a>
+ Práticas recomendadas [CloudFormation  ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
+ Práticas recomendadas [AWS CodePipeline  ](https://docs.aws.amazon.com/codepipeline/latest/userguide/best-practices.html)

## Épicos
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-epics"></a>

### Extrair imagens de contêineres de repositóriod públicos e privados do Amazon ECR
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Extrai uma imagem do repositório público do Amazon ECR. | No terminal, execute o seguinte comando para extrair a imagem `amazonlinux` do repositório público do Amazon ECR.<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre>Quando a imagem for transferida para sua máquina local, você verá o seguinte resumo, que representa o índice da imagem.<pre>2018.03: Pulling from amazonlinux/amazonlinux<br />4ddc0f8d367f: Pull complete <br /><br />Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5<br /><br />Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />public.ecr.aws/amazonlinux/amazonlinux:2018.03</pre> | Desenvolvedor de aplicativos, AWS DevOps, administrador da AWS | 
| Envie a imagem para um repositório privado do Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrador da AWS, AWS DevOps, desenvolvedor de aplicativos | 
| Extraia a mesma imagem do repositório privado do Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Desenvolvedor de aplicativos, AWS DevOps, administrador da AWS | 

### Comparar os manifestos de imagem
<a name="compare-the-image-manifests"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Encontre o manifesto da imagem armazenada no repositório público do Amazon ECR. | No terminal, execute o seguinte comando para extrair o manifesto da imagem `public.ecr.aws/amazonlinux/amazonlinux:2018.03` do repositório público do Amazon ECR.<pre>$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />{<br />   "schemaVersion": 2,<br />   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",<br />   "manifests": [<br />      {<br />         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />         "size": 529,<br />         "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",<br />         "platform": {<br />            "architecture": "amd64",<br />            "os": "linux"<br />         }<br />      }<br />   ]<br />}</pre> | Administrador da AWS, AWS DevOps, desenvolvedor de aplicativos | 
| Encontre o manifesto da imagem armazenada no repositório privado do Amazon ECR. | No terminal, execute o seguinte comando para extrair o manifesto da imagem `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest` do repositório privado do Amazon ECR.<pre>$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest                                          <br />{<br />	"schemaVersion": 2,<br />	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />	"config": {<br />		"mediaType": "application/vnd.docker.container.image.v1+json",<br />		"size": 1477,<br />		"digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68"<br />	},<br />	"layers": [<br />		{<br />			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",<br />			"size": 62267075,<br />			"digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453"<br />		}<br />	]<br />}</pre> | AWS DevOps, administrador de sistemas da AWS, desenvolvedor de aplicativos | 
| Compare o resumo obtido pelo Docker com o resumo do manifesto da imagem no repositório privado do Amazon ECR. | Outra questão é por que o resumo fornecido pelo comando **docker pull** difere do resumo do manifesto para a imagem `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`.O resumo usado para **docker pull** representa o resumo do manifesto da imagem, que é armazenado em um registro. Esse resumo é considerado a raiz de uma cadeia de hash, porque o manifesto contém o hash do conteúdo que será baixado e importado para o Docker.O ID da imagem usado no Docker pode ser encontrado neste manifesto como `config.digest`. Isso representa a configuração de imagem que o Docker usa. Então, você poderia dizer que o manifesto é o envelope e a imagem é o conteúdo do envelope. O resumo do manifesto é sempre diferente do ID da imagem. No entanto, um manifesto específico deve sempre produzir o mesmo ID de imagem. Como o resumo do manifesto é uma cadeia de hash, não podemos garantir que sempre será o mesmo para um determinado ID de imagem. Na maioria dos casos, ele produz o mesmo resumo, embora o Docker não possa garantir isso. A possível diferença no resumo do manifesto decorre do fato de o Docker não armazenar localmente os blobs que são compactados com o gzip. Portanto, a exportação de camadas pode produzir um resumo diferente, embora o conteúdo não compactado permaneça o mesmo. O ID da imagem verifica se o conteúdo não compactado é o mesmo; ou seja, o ID da imagem agora é um identificador de conteúdo endereçável (`chainID`).Para confirmar essas informações, você pode comparar a saída do comando **docker inspect** nos repositórios públicos e privados do Amazon ECR:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Os resultados verificam se as duas imagens têm o mesmo resumo de ID de imagem e resumo de camada.ID: `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`Camadas: `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`Além disso, os resumos são baseados nos bytes do objeto gerenciado localmente (o arquivo local é um tar da camada de imagem do contêiner) ou no blob enviado ao servidor de registro. No entanto, quando você envia o blob para um registro, o tar é compactado e o resumo é computado no arquivo tar compactado. Portanto, a diferença no valor do resumo do **docker pull** surge da compactação aplicada no nível do registro (Amazon ECR privado ou público).Essa explicação é específica para o uso de um cliente Docker. Você não verá esse comportamento com outros clientes, como **nerdctl** ou **Finch**, porque eles não compactam automaticamente a imagem durante as operações de push e pull. | AWS DevOps, administrador de sistemas da AWS, desenvolvedor de aplicativos | 

### Identificar automaticamente imagens duplicadas entre os repositórios públicos e privados do Amazon ECR
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Clone o repositório do Github desse padrão em uma pasta local:<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | Administrador da AWS, AWS DevOps | 
| Configure um CI/CD pipeline. | O GitHub repositório inclui um `.yaml` arquivo que cria uma CloudFormation pilha para configurar um pipeline. AWS CodePipeline[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)O pipeline será configurado com dois estágios (CodeCommit e CodeBuild, conforme mostrado no diagrama da arquitetura) para identificar imagens no repositório privado que também existem no repositório público. O pipeline é configurado com os seguintes recursos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrador da AWS, AWS DevOps | 
| Preencha o CodeCommit repositório. | Para preencher o CodeCommit repositório, execute estas etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrador da AWS, AWS DevOps | 
| Limpeza. | Para evitar cobranças futuras, exclua os recursos seguindo estas etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrador da AWS | 

## Solução de problemas
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Ao tentar enviar, extrair ou interagir de outra forma com um CodeCommit repositório a partir do terminal ou da linha de comando, você é solicitado a fornecer um nome de usuário e uma senha, além de fornecer as credenciais do Git para seu usuário do IAM. | As causas comuns para esse erro são as seguintes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Dependendo de seu sistema operacional e ambiente local, talvez seja necessário instalar um gerenciador de credenciais, configurar o gerenciador de credenciais incluído no sistema operacional ou personalizar o ambiente local para usar o armazenamento de credenciais. Por exemplo, se seu computador estiver executando o macOS, você pode usar o utilitário Acesso às Chaves para armazenar suas credenciais. Se seu computador for Windows, você pode usar o Git Credential Manager que é instalado com o Git para Windows. Para obter mais informações, consulte [Configuração para usuários HTTPS usando credenciais do Git na CodeCommit documentação e Armazenamento de credenciais](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) [na](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage) documentação do Git. | 
| Você encontra erros de HTTP 403 ou “sem credenciais básicas de autenticação” ao enviar uma imagem para o repositório do Amazon ECR. | **Você pode encontrar essas mensagens de erro do comando **docker push** ou **docker pull**, mesmo que tenha se autenticado com sucesso no Docker usando o comando aws ecr. get-login-password** As causas conhecidas são:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## Recursos relacionados
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [Solução automatizada para identificar imagens de contêineres duplicadas entre repositórios (GitHub repositório](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/))
+ [Galeria Pública do Amazon ECR](https://gallery.ecr.aws/)
+ [Private images in Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html) (documentação do Amazon ECR)
+ [AWS::CodePipeline::Pipeline recurso](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html) (CloudFormation documentação)
+ [OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## Mais informações
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Saída da inspeção Docker para imagem no repositório público do Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

**Saída da inspeção do Docker para imagem no repositório privado do Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

# Instale o agente SSM nos nós de trabalho do Amazon EKS usando o Kubernetes DaemonSet
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Resumo
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-summary"></a>

**Observação, setembro de 2021:** a última versão otimizada do Amazon EKS AMIs instala o SSM Agent automaticamente. Para obter mais informações, consulte as [notas de lançamento](https://github.com/awslabs/amazon-eks-ami/releases/tag/v20210621) de junho de 2021 AMIs.

No Amazon Elastic Kubernetes Service (Amazon EKS), devido às diretrizes de segurança, os nós de processamento não têm pares de chaves Secure Shell (SSH) anexados a eles. Esse padrão mostra como você pode usar o tipo de DaemonSet recurso Kubernetes para instalar o AWS Systems Manager Agent (SSM Agent) em todos os nós de trabalho, em vez de instalá-lo manualmente ou substituir a Amazon Machine Image (AMI) pelos nós. DaemonSet usa um cron job no nó de trabalho para agendar a instalação do SSM Agent. Você também pode usar esse padrão para instalar outros pacotes nos nós de processamento.

Quando você está solucionando problemas no cluster, a instalação do SSM Agent sob demanda permite estabelecer uma sessão SSH com o nó de processamento, coletar logs ou examinar a configuração da instância, sem pares de chaves SSH.

## Pré-requisitos e limitações
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-prereqs"></a>

**Pré-requisitos **
+ Um cluster Amazon EKS existente com nós de trabalho do Amazon Elastic Compute Cloud (Amazon EC2).
+ As instâncias de contêiner devem ter as permissões necessárias para se comunicar com o serviço SSM. A função gerenciada do AWS Identity and Access Management (IAM), a **Amazon SSMManaged InstanceCore** fornece as permissões necessárias para que o SSM Agent seja executado em EC2 instâncias. Para obter mais informações, consulte a [documentação do AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html).

**Limitações**
+ Esse padrão não é aplicável ao AWS Fargate, porque DaemonSets não são compatíveis com a plataforma Fargate.
+ Esse padrão se aplica somente aos nós de processamento baseados em Linux.
+ Os DaemonSet pods funcionam em modo privilegiado. Se o cluster do Amazon EKS tiver um webhook que bloqueia pods no modo privilegiado, o SSM Agent não será instalado.

## Arquitetura
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-architecture"></a>

O diagrama a seguir ilustra a arquitetura desse padrão.

![\[Usando o Kubernetes DaemonSet para instalar o SSM Agent nos nós de trabalho do Amazon EKS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/016d53f3-45c1-4913-b542-67124e1462b8/images/3a6dfd00-e54b-44d5-843a-4c26ce9826c9.png)


## Ferramentas
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools"></a>

**Ferramentas**
+ O [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) é um utilitário de linha de comando que é usado para interagir com um cluster do Amazon EKS. Esse padrão é usado `kubectl` para implantar um DaemonSet no cluster Amazon EKS, que instalará o SSM Agent em todos os nós de trabalho.
+ O [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) facilita para você a execução do Kubernetes na AWS, eliminando a necessidade de instalar, operar e manter seu próprio ambiente de gerenciamento ou nós do Kubernetes. O Kubernetes é um sistema de código aberto para automatizar a implantação, a escalabilidade e o gerenciamento de aplicações em contêineres.
+ [O AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) permite que você gerencie suas EC2 instâncias, instâncias locais e máquinas virtuais (VMs) por meio de um shell interativo baseado em navegador com um clique ou por meio da AWS Command Line Interface (AWS CLI).

**Código **

Use o código a seguir para criar um arquivo DaemonSet de configuração que instalará o SSM Agent no cluster Amazon EKS. Siga as instruções na seção [Épicos](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics).

```
cat << EOF > ssm_daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    k8s-app: ssm-installer
  name: ssm-installer
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: ssm-installer
  template:
    metadata:
      labels:
        k8s-app: ssm-installer
    spec:
      containers:
      - name: sleeper
        image: busybox
        command: ['sh', '-c', 'echo I keep things running! && sleep 3600']
      initContainers:
      - image: amazonlinux
        imagePullPolicy: Always
        name: ssm
        command: ["/bin/bash"]
        args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"]
        securityContext:
          allowPrivilegeEscalation: true
        volumeMounts:
        - mountPath: /etc/cron.d
          name: cronfile
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      volumes:
      - name: cronfile
        hostPath:
          path: /etc/cron.d
          type: Directory
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
EOF
```

## Épicos
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics"></a>

### Configurar o kubectl
<a name="set-up-kubectl"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale e configure o kubectl para acessar o cluster do EKS. | Se o `kubectl` ainda não estiver instalado e configurado para acessar o cluster do Amazon EKS, consulte [Instalação do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS. | DevOps | 

### Implemente o DaemonSet
<a name="deploy-the-daemonset"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o arquivo DaemonSet de configuração. | Use o código na seção [Código](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools) no início desse padrão para criar um arquivo de DaemonSet configuração chamado`ssm_daemonset.yaml`, que será implantado no cluster Amazon EKS. O pod lançado por DaemonSet tem um contêiner principal e um `init` contêiner. O contêiner principal tem um comando `sleep`. O contêiner `init` inclui uma seção `command` que cria um arquivo de trabalho cron para instalar o SSM Agent no caminho `/etc/cron.d/`. O trabalho cron é executado somente uma vez, e o arquivo que ele cria é automaticamente excluído após a conclusão do trabalho. Quando o contêiner inicial terminar, o contêiner principal espera 60 minutos antes de sair. Após 60 minutos, um novo pod é lançado. Esse pod instala o SSM Agent, se estiver ausente, ou atualiza o SSM Agent para a versão mais recente.Se necessário, você pode modificar o comando `sleep` para reiniciar o pod uma vez por dia ou para executá-lo com mais frequência.  | DevOps | 
| Implemente o DaemonSet no cluster Amazon EKS. | Para implantar o arquivo de DaemonSet configuração que você criou na etapa anterior no cluster Amazon EKS, use o seguinte comando:<pre>kubectl apply -f ssm_daemonset.yaml </pre>Esse comando cria um DaemonSet para executar os pods nos nós de trabalho para instalar o SSM Agent. | DevOps | 

## Recursos relacionados
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-resources"></a>
+ [Instalação do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (documentação do Amazon EKS)
+ [Configurando o Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html) (documentação do AWS Systems Manager)

# Instale o agente SSM e o CloudWatch agente nos nós de trabalho do Amazon EKS usando preBootstrapCommands
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands"></a>

*Akkamahadevi Hiremath, Amazon Web Services*

## Resumo
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-summary"></a>

Esse padrão fornece exemplos de código e etapas para instalar o AWS Systems Manager Agent (SSM Agent) e o CloudWatch agente Amazon nos nós de trabalho do Amazon Elastic Kubernetes Service (Amazon EKS) na nuvem Amazon Web Services (AWS) durante a criação do cluster Amazon EKS. Você pode instalar o agente SSM e o CloudWatch agente usando a `preBootstrapCommands` propriedade do [esquema do arquivo de `eksctl` configuração](https://eksctl.io/usage/schema/) (documentação da Weaveworks). Em seguida, você pode usar o SSM Agent para se conectar aos seus nós de trabalho sem usar um par de chaves do Amazon Elastic Compute Cloud EC2 (Amazon). Além disso, você pode usar o CloudWatch agente para monitorar a utilização da memória e do disco nos nós de trabalho do Amazon EKS.

## Pré-requisitos e limitações
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ O [utilitário de linha de comando eksctl](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html), instalado e configurado no macOS, Linux ou Windows
+ O [utilitário de linha de comando kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html), instalado e configurado no macOS, Linux ou Windows

**Limitações**
+ Recomendamos que você evite adicionar scripts de longa execução à propriedade `preBootstrapCommands`****, pois isso impede o nó se junte ao cluster do Amazon EKS durante as atividades de escalabilidade. Em vez disso, recomendamos que você crie uma [imagem de máquina da Amazon (AMI) personalizada](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html).
+ Esse padrão se aplica somente às instâncias do Amazon EC2 Linux.

## Arquitetura
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-architecture"></a>

**Pilha de tecnologia**
+ Amazon CloudWatch
+ Amazon Elastic Kubernetes Service (Amazon EKS)
+ AWS Systems Manager Parameter Store

**Arquitetura de destino**

O diagrama a seguir mostra um exemplo de um usuário se conectando aos nós de processamento do Amazon EKS usando o SSM Agent, que foi instalado usando `preBootstrapCommands`.

![\[User connecting to Amazon EKS worker nodes via Systems Manager, with SSM Agent and CloudWatch agent on each node.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b37a3cdb-204f-4014-8317-3600a793dac7/images/9a5760af-23bb-4616-97b0-b401a9d080cf.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. O usuário cria um cluster Amazon EKS usando o arquivo de `eksctl` configuração com a `preBootstrapCommands` propriedade, que instala o agente e CloudWatch o agente SSM.

1. Todas as novas instâncias que ingressam no cluster posteriormente devido a atividades de escalabilidade são criadas com o agente e o agente SSM pré-instalados. CloudWatch 

1. O usuário se conecta à Amazon EC2 usando o agente SSM e, em seguida, monitora a utilização da memória e do disco usando o CloudWatch agente.

## Ferramentas
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-tools"></a>
+  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 Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar e manter seus próprios nós ou ambiente de gerenciamento do Kubernetes.
+ O [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) oferece armazenamento hierárquico seguro para o gerenciamento de dados de configuração e gerenciamento de segredos.
+ [O AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) ajuda você a gerenciar suas EC2 instâncias, instâncias locais e máquinas virtuais por meio de um shell interativo, com um clique e baseado em navegador, ou por meio da AWS Command Line Interface (AWS CLI).
+ O [eksctl](https://eksctl.io/usage/schema/) é utilitário de linha de comando para criar e gerenciar clusters do Kubernetes no Amazon EKS.
+ O [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) é um utilitário de linha de comando para se comunicar com o servidor da API do cluster.

## Épicos
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-epics"></a>

### Criar um cluster do Amazon EKS.
<a name="create-an-amazon-eks-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Armazene o arquivo de configuração do CloudWatch agente. | Armazene o arquivo de configuração do CloudWatch agente no [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) na região da AWS onde você deseja criar seu cluster Amazon EKS. Para fazer isso, [crie um parâmetro](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) no AWS Systems Manager Parameter Store e anote o nome do parâmetro (por exemplo, `AmazonCloudwatch-linux`).Para obter mais informações, consulte o *exemplo de código do arquivo de configuração do CloudWatch agente* na seção [Informações adicionais](#install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional) desse padrão. | DevOps engenheiro | 
| Criar o arquivo de configuração e o cluster eksctl.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

### Verifique se o agente SSM e o CloudWatch agente funcionam
<a name="verify-that-the-ssm-agent-and-cloudwatch-agent-work"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Testar o SSM Agent. | Use o SSH para se conectar aos nós de cluster do Amazon EKS usando qualquer um dos métodos abordados em [Iniciar uma sessão](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console%20%20or%20https:%2F%2Fdocs.aws.amazon.com%2Fsystems-manager%2Flatest%2Fuserguide%2Fsession-manager-working-with-sessions-start.html%23sessions-start-cli) na documentação do AWS Systems Manager. | AWS DevOps | 
| Teste o CloudWatch agente. | Use o CloudWatch console para validar o CloudWatch agente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

## Recursos relacionados
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-resources"></a>
+ [Instalando e executando o CloudWatch agente em seus servidores](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html) ( CloudWatch documentação da Amazon)
+ [Criar um parâmetro do Systems Manager (console)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) (documentação do AWS Systems Manager)
+ [Crie o arquivo de configuração do CloudWatch agente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html) ( CloudWatch documentação da Amazon)
+ [Iniciar uma sessão (AWS CLI)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) (documentação do AWS Systems Manager).
+ [Iniciando uma sessão ( EC2 console da Amazon)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console) (documentação do AWS Systems Manager)

## Mais informações
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional"></a>

**Exemplo de arquivo de configuração do CloudWatch agente**

No exemplo a seguir, o CloudWatch agente está configurado para monitorar a utilização do disco e da memória nas instâncias do Amazon Linux:

```
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "cwagent"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
}
```

**Exemplo de arquivo de configuração eksctl**

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test
  region: us-east-2
  version: "1.24"
managedNodeGroups:
  - name: test
    minSize: 2
    maxSize: 4
    desiredCapacity: 2
    volumeSize: 20
    instanceType: t3.medium
    preBootstrapCommands:
    - sudo yum install amazon-ssm-agent -y
    - sudo systemctl enable amazon-ssm-agent
    - sudo systemctl start amazon-ssm-agent
    - sudo yum install amazon-cloudwatch-agent -y
    - sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudwatch-linux
    iam:
      attachPolicyARNs:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
        - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
```

**Outros detalhes do código**
+ Na última linha da propriedade `preBootstrapCommands`, `AmazonCloudwatch-linux` é o nome do parâmetro criado no AWS Systems Manager Parameter Store. É necessário incluir `AmazonCloudwatch-linux` no Parameter Store na mesma região da AWS em que o cluster do Amazon EKS foi criado. Você também pode especificar um caminho de arquivo, mas recomendamos o uso do Systems Manager para facilitar a automação e a reutilização.
+ Se você usar `preBootstrapCommands` no arquivo `eksctl` de configuração, verá dois modelos de lançamento no Console de Gerenciamento da AWS. O primeiro modelo de lançamento inclui os comandos especificados em `preBootstrapCommands`. O segundo modelo inclui os comandos especificados em `preBootstrapCommands` e os dados padrão do usuário do Amazon EKS. Esses dados são necessários para que os nós se juntem ao cluster. O grupo do Auto Scaling do grupo de nós usa esses dados do usuário para criar novas instâncias.
+ Se você usar o atributo `iam` no arquivo `eksctl` de configuração, deverá listar as políticas padrão do Amazon EKS com todas as políticas adicionais exigidas nas políticas anexadas do AWS Identity and Access Management (IAM). No trecho de código da etapa *Criar o arquivo de configuração eksctl e o cluster*, `AmazonSSMMangedInstanceCore` são adicionadas políticas adicionais para garantir que o CloudWatch agente `CloudWatchAgentServerPolicy` e o agente SSM funcionem conforme o esperado. As políticas `AmazonEKSWorkerNodePolicy`, `AmazonEKS_CNI_Policy` e `AmazonEC2ContainerRegistryReadOnly` são políticas obrigatórias necessárias para que o cluster Amazon EKS funcione corretamente.

# Migração dos NGINX Ingress Controllers ao habilitar o Modo Automático do Amazon EKS
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye e Shamanth Devagari, Amazon Web Services*

## Resumo
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

O [Modo Automático do EKS](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) para o Amazon Elastic Kubernetes Service (Amazon EKS) pode reduzir a sobrecarga operacional de executar as workloads em clusters do Kubernetes. Esse modo também AWS permite configurar e gerenciar a infraestrutura em seu nome. Ao habilitar o Modo Automático do EKS em um cluster existente, é necessário planejar cuidadosamente a migração das configurações do [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/). Isso ocorre porque a transferência direta de Network Load Balancers não é possível.

Você pode usar uma estratégia de blue/green implantação para migrar uma instância do NGINX Ingress Controller ao habilitar o EKS Auto Mode em um cluster Amazon EKS existente.

## Pré-requisitos e limitações
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Um [cluster do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) que executa a versão 1.29 ou versões posteriores do Kubernetes
+ [Versões mínimas](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required) requeridas para os complementos do Amazon EKS
+ Versão mais recente do [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Uma instância existente do [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/deploy/#aws)
+ (Opcional) Uma [zona hospedada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) no Amazon Route 53 para redirecionamento de tráfego baseado em DNS

## Arquitetura
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

Uma *implantação azul/verde* é uma estratégia de implantação na qual você cria dois ambientes separados, mas idênticos. Blue/green as implantações fornecem recursos de liberação e reversão com tempo de inatividade quase zero. A ideia fundamental consiste em alternar o tráfego entre dois ambientes idênticos que estão executando versões diferentes da aplicação.

A imagem apresentada a seguir ilustra a migração de Network Load Balancers de duas instâncias diferentes do NGINX Ingress Controller ao habilitar o Modo Automático do EKS. Você usa uma blue/green implantação para transferir o tráfego entre os dois balanceadores de carga de rede.

![\[Usando uma estratégia de blue/green implantação para migrar instâncias do NGINX Ingress Controller.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


O namespace de origem é o namespace *azul*. Este é o local em que o serviço e a instância originais do NGINX Ingress Controller são executados, antes de você habilitar o Modo Automático do EKS. O serviço e a instância originais estabelecem conexão com um Network Load Balancer que tem um nome de DNS configurado no Route 53. O [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) implantou este Network Load Balancer na nuvem privada virtual (VPC) de destino.

O diagrama mostra o seguinte fluxo de trabalho para configurar um ambiente para uma blue/green implantação:

1. Instale e configure outra instância do NGINX Ingress Controller em um namespace diferente, o namespace *verde*.

1. No Route 53, configure um nome de DNS para um novo Network Load Balancer.

## Ferramentas
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**Serviços da AWS**
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, você pode distribuir o tráfego entre instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud (Amazon EC2) em uma ou mais zonas de disponibilidade.
+ 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.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

**Outras ferramentas**
+ O [Helm](https://helm.sh/) é um gerenciador de pacotes de código aberto para o Kubernetes que auxilia na instalação e no gerenciamento de aplicações no cluster do Kubernetes.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) é uma interface de linha de comando que ajuda você na execução de comandos em clusters do Kubernetes.
+ O [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) conecta aplicações e serviços do Kubernetes, fornecendo gerenciamento de solicitações, autenticação, recursos personalizados de autoatendimento e depuração.

## Épicos
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### Análise do ambiente existente
<a name="review-the-existing-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Confirme que a instância original do NGINX Ingress Controller está operacional. | Digite o comando apresentado a seguir para verificar se os recursos no namespace `ingress-nginx` estão operacionais. Se o NGINX Ingress Controller foi implantado em outro namespace, atualize o nome do namespace neste comando.<pre>kubectl get all -n ingress-nginx</pre>Na saída do comando, certifique-se de que os pods do NGINX Ingress Controller estão no estado de execução. Veja a seguir um exemplo de saída:<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps engenheiro | 

### Implemente uma HTTPd carga de trabalho de amostra para usar o controlador de entrada NGINX
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie os recursos do Kubernetes. | Digite os seguintes comandos para criar uma implantação, um serviço e uma entrada de amostra do Kubernetes:<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps engenheiro | 
| Analise os recursos implantados. | Digite o seguinte comando para visualizar uma lista dos recursos implantados:<pre>kubectl get all,ingress</pre>Na saída, confirme se o HTTPd pod de amostra está em execução. Veja a seguir um exemplo de saída:<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps engenheiro | 
| Confirme se o serviço está disponível. | Digite o seguinte comando para confirmar que o serviço está disponível por meio do nome de DNS do Network Load Balancer:<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>A saída esperada é a seguinte:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps engenheiro | 
| (Opcional) Crie um registro de DNS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps engenheiro, AWS DevOps | 

### Habilitação do Modo Automático do EKS no cluster existente
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Habilite o Modo Automático do EKS. | Siga as instruções apresentadas em [Habilitar o Modo Automático do EKS em um cluster existente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentação do Amazon EKS). | AWS DevOps | 

### Instalação de um novo NGINX Ingress Controller
<a name="install-a-new-nginx-ingress-controller"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure uma nova instância do NGINX Ingress Controller. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps engenheiro | 
| Realize a implantação da nova instância do NGINX Ingress Controller. | Digite o seguinte comando para aplicar o arquivo de manifesto modificado:<pre>kubectl apply -f deploy.yaml</pre> | DevOps engenheiro | 
| Confirme se a implantação teve êxito. | Digite o seguinte comando para verificar se os recursos no namespace `ingress-nginx-v2` estão operacionais:<pre>kubectl get all -n ingress-nginx-v2</pre>Na saída do comando, certifique-se de que os pods do NGINX Ingress Controller estão em um estado de execução. Veja a seguir um exemplo de saída:<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps engenheiro | 
| Crie uma nova entrada para a carga de HTTPd trabalho de amostra. | Insira o comando a seguir para criar uma nova entrada para a carga de HTTPd trabalho de amostra existente:<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps engenheiro | 
| Confirme se a nova entrada está funcionando. | Digite o seguinte comando para confirmar se a nova entrada está funcionando:<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>A saída esperada é a seguinte:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps engenheiro | 

### Substituir
<a name="cut-over"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Realize a substituição para o novo namespace. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps engenheiro | 
| Analise as duas entradas. | Insira o comando a seguir para analisar as duas entradas que foram criadas para a carga de HTTPd trabalho de amostra:<pre>kubectl get ingress</pre>Veja a seguir um exemplo de saída:<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps engenheiro | 

## Recursos relacionados
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Habilitar o Modo Automático do EKS em um cluster existente](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (documentação do Amazon EKS)
+ [Solucione problemas com balanceadores de carga criados pelo controlador de serviço Kubernetes no Amazon EKS](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) (re:POST Knowledge Center)AWS 
+ [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/) (documentação do NGINX)

# Migre suas cargas de trabalho de contêiner do Azure Red Hat OpenShift (ARO) para Serviço Red Hat OpenShift na AWS (ROSA)
<a name="migrate-container-workloads-from-aro-to-rosa"></a>

*Naveen Ramasamy, Srikanth Rangavajhala e Gireesh Sreekantan, Amazon Web Services*

## Resumo
<a name="migrate-container-workloads-from-aro-to-rosa-summary"></a>

Esse padrão fornece step-by-step instruções para migrar cargas de trabalho de contêiner do Azure Red Hat OpenShift (ARO) para [Serviço Red Hat OpenShift na AWS (ROSA](https://aws.amazon.com/rosa/)). O ROSA é um serviço gerenciado de Kubernetes fornecido pela Red Hat em colaboração com o. AWS Ele ajuda você a implantar, gerenciar e escalar seus aplicativos em contêineres usando a plataforma Kubernetes e se beneficia da experiência da Red Hat em Kubernetes e na infraestrutura. Nuvem AWS 

A migração de workloads de contêineres do ARO, de outras nuvens ou de on-premises para o ROSA envolve a transferência de aplicações, configurações e dados de uma plataforma para outra. Esse padrão ajuda a garantir uma transição suave enquanto otimiza os Nuvem AWS serviços, a segurança e a eficiência de custos. Ele abrange dois métodos para migrar suas cargas de trabalho para clusters ROSA: CI/CD e o Migration Toolkit for Containers (MTC).

Este padrão abrange os dois métodos. O método que você escolhe depende da complexidade e da certeza do seu processo de migração. Se você tem controle total sobre o estado do seu aplicativo e pode garantir uma configuração consistente por meio de um pipeline, recomendamos que você use o CI/CD método. No entanto, se o estado da sua aplicação envolver incertezas, mudanças imprevistas ou um ecossistema complexo, recomendamos que você use o MTC como um caminho confiável e controlado para migrar sua aplicação e seus dados para um novo cluster. Para uma comparação detalhada dos dois métodos, consulte a seção [Informações adicionais](#migrate-container-workloads-from-aro-to-rosa-additional).

Benefícios da migração para o ROSA:
+ O ROSA se integra perfeitamente AWS como um serviço nativo. É facilmente acessível por meio do Console de gerenciamento da AWS e cobrado por meio de um único Conta da AWS. Ele oferece total compatibilidade com outros Serviços da AWS e fornece suporte colaborativo tanto da Red Hat AWS quanto da Red Hat.
+ O ROSA oferece suporte a implantações híbridas e multinuvem Ele permite que as aplicações sejam executadas de forma consistente em data centers on-premises e em vários ambientes de nuvem.
+ O ROSA se beneficia do foco em segurança da Red Hat e fornece recursos como controle de acesso baseado em funções (RBAC), digitalização de imagens e avaliações de vulnerabilidade para garantir um ambiente de contêiner seguro.
+ O ROSA foi projetado para escalar aplicações com facilidade e fornecer opções de alta disponibilidade. Ele permite que as aplicações cresçam conforme necessário, mantendo a confiabilidade.
+ O ROSA automatiza e simplifica a implantação de um cluster do Kubernetes em comparação com os métodos manuais de configuração e gerenciamento. Isso acelera o processo de desenvolvimento e implantação.
+ O ROSA se beneficia dos Nuvem AWS serviços e fornece integração perfeita com AWS ofertas como serviços de banco de dados, soluções de armazenamento e serviços de segurança.

## Pré-requisitos e limitações
<a name="migrate-container-workloads-from-aro-to-rosa-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Permissões configuradas para Serviços da AWS isso que o ROSA usa para fornecer funcionalidade. Para obter mais informações, consulte [Prerequisites](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html) na documentação do ROSA.
+ ROSA habilitado no [console do ROSA](https://console.aws.amazon.com/rosa). Para obter instruções, consulte a [documentação do ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html#enable-rosa).
+ O cluster do ROSA instalado e configurado. Para obter mais informações, consulte [Get started with ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started.html) na documentação do ROSA. Para entender os diferentes métodos para configurar um cluster ROSA, consulte o guia de orientação AWS prescritiva sobre estratégias de [implementação do ROSA](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/).
+ Conectividade de rede estabelecida a partir da rede local AWS por meio de [AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect.html)(preferencial) ou [AWS Virtual Private Network (Site-to-Site VPN)](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html).
+ Uma instância do Amazon Elastic Compute Cloud (Amazon EC2) ou outro servidor virtual para instalar ferramentas como `aws client` cliente OpenShift CLI `oc` (), cliente ROSA e binário Git.

Pré-requisitos adicionais para o método: CI/CD 
+ Acesso ao servidor Jenkins local com permissões para criar um novo pipeline, adicionar estágios, adicionar OpenShift clusters e realizar compilações.
+ Acesso ao repositório Git onde o código-fonte da aplicação é mantido, com permissões para criar uma nova ramificação Git e realizar confirmações na nova ramificação.

Pré-requisitos adicionais para o método MTC:
+ Um bucket do Amazon Simple Storage Service (Amazon S3) que será usado como repositório de replicação.
+ Acesso administrativo ao cluster ARO de origem. Isso é necessário para configurar a conexão MTC.

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

## Arquitetura
<a name="migrate-container-workloads-from-aro-to-rosa-architecture"></a>

O ROSA fornece três padrões de implantação de rede: público, privado [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)e. PrivateLinkpermite que as equipes de engenharia de confiabilidade de sites (SRE) da Red Hat gerenciem o cluster usando uma sub-rede privada conectada ao PrivateLink endpoint do cluster em uma VPC existente.

A escolha da PrivateLink opção fornece a configuração mais segura. Por esse motivo, nós o recomendamos para workloads confidenciais ou requisitos rígidos de conformidade. Para obter informações sobre as opções de implantação de redes públicas e privadas, consulte a [ OpenShift documentação da Red Hat](https://docs.openshift.com/rosa/architecture/rosa-architecture-models.html#rosa-hcp-architecture_rosa-architecture-models).

**Importante**  
Você pode criar um PrivateLink cluster somente no momento da instalação. Você não pode alterar um cluster para usar PrivateLink após a instalação.

O diagrama a seguir ilustra a PrivateLink arquitetura de um cluster ROSA usado Direct Connect para se conectar aos ambientes locais e ARO.

![\[Cluster ROSA que usa o AWS Direct Connect e a AWS PrivateLink.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/eff9b017-6fc7-4874-b610-849a42071ef4.png)


**AWS permissões para ROSA**

Para obter AWS permissões para o ROSA, recomendamos que você use AWS Security Token Service (AWS STS) com tokens dinâmicos de curta duração. Esse método usa funções e políticas predefinidas com privilégios mínimos para conceder ao ROSA permissões mínimas para operar no e oferece suporte à instalação Conta da AWS, ao plano de controle e à funcionalidade de computação do ROSA.

**Reimplantação do pipeline de CI/CD**

CI/CD pipeline redeployment is the recommended method for users who have a mature CI/CDoleoduto. Ao escolher essa opção, você pode usar qualquer [estratégia de DevOps implantação](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/deployment-strategies.html) para transferir gradualmente a carga do aplicativo para implantações no ROSA.

**nota**  
Esse padrão pressupõe um caso de uso comum em que você tem um pipeline Git, JFrog Artifactory e Jenkins locais. Essa abordagem exige que você estabeleça conectividade de rede da sua rede local AWS até Direct Connect a outra e que configure o cluster ROSA antes de seguir as instruções na seção [Epics](#migrate-container-workloads-from-aro-to-rosa-epics). Consulte a seção [Pré-requisitos](#migrate-container-workloads-from-aro-to-rosa-prereqs) para obter detalhes.

O diagrama a seguir mostra o fluxo de trabalho para esse método.

![\[Migração de contêineres do ARO para o ROSA usando o CI/CD método.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/f658590e-fbd9-4297-a02c-0b516694d436.png)


**Método MTC**

Você pode usar o [kit de ferramentas de migração para contêineres (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html)** **para migrar suas workloads em contêineres entre diferentes ambientes do Kubernetes, como do ARO para o ROSA. O MTC simplifica o processo de migração automatizando várias tarefas importantes e fornecendo uma estrutura abrangente para gerenciar o ciclo de vida da migração.

O diagrama a seguir mostra o fluxo de trabalho para esse método.

![\[Migração de contêineres do ARO para o ROSA usando o método MTC.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/979bbc7b-2e39-4dd1-b4f0-ea1032880a38.png)


## Ferramentas
<a name="migrate-container-workloads-from-aro-to-rosa-tools"></a>

**Serviços da AWS**
+ [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)é um serviço on-line de transferência e descoberta de dados que ajuda você a mover arquivos ou dados de objetos para, de e entre serviços AWS de armazenamento.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)conecta sua rede interna a um Direct Connect local por meio de um cabo de fibra óptica Ethernet padrão. Com essa conexão, você pode criar interfaces virtuais diretamente para o público, Serviços da AWS ignorando os provedores de serviços de Internet em seu caminho de rede.
+ [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.
+ [Serviço Red Hat OpenShift na AWS (ROSA)](https://docs.aws.amazon.com/rosa/latest/userguide/what-is-rosa.html) é um serviço gerenciado que ajuda OpenShift os usuários da Red Hat a criar, escalar e gerenciar aplicativos em contêineres. AWS
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) ajuda você a solicitar credenciais temporárias com privilégios limitados para os usuários.

**Outras ferramentas**
+ O [kit de ferramentas de migração para contêineres (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) fornece um console e uma API para migrar aplicações em contêineres do ARO para o ROSA.

## Práticas recomendadas
<a name="migrate-container-workloads-from-aro-to-rosa-best-practices"></a>
+ Para [resiliência](https://docs.aws.amazon.com/ROSA/latest/userguide/disaster-recovery-resiliency.html) e se você tiver cargas de trabalho de conformidade de segurança, configure um cluster ROSA Multi-AZ que use. PrivateLink Para obter mais informações, consulte a [documentação do ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started-classic-private-link.html).
**nota**  
PrivateLink não pode ser configurado após a instalação.
+ O bucket do S3 que você usa para o repositório de replicação não deve ser público. Use as políticas do bucket do S3 apropriadas para restringir o acesso.
+ Se você escolher o método MTC, use a opção de migração **Stage** para reduzir a janela de tempo de inatividade durante a substituição.
+ Revise suas cotas de serviço antes e depois de provisionar o cluster do ROSA. Se necessário, solicite um aumento de cota de acordo com suas necessidades. Para obter mais informações, consulte a [documentação do Service Quotas](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html).
+ Revise as [diretrizes de segurança do ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/security.html) e implemente as práticas recomendadas de segurança.
+ Recomendamos que você remova o administrador de cluster padrão após a instalação. Para obter mais informações, consulte a [ OpenShift documentação da Red Hat](https://docs.openshift.com/container-platform/4.13/post_installation_configuration/cluster-tasks.html).
+ Use o escalonamento automático do pool de máquinas para reduzir os nós de processamento não utilizados no cluster do ROSA e otimizar os custos. Para obter mais informações, consulte [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/5-nodes-storage/3-autoscale-machine-pool).
+ Use o serviço Red Hat Cost Management for OpenShift Container Platform para entender e monitorar melhor os custos de nuvens e containers. Para obter mais informações, consulte [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/10-cost-management).
+ Monitore e audite os serviços e aplicativos da infraestrutura do cluster ROSA usando Serviços da AWS. Para obter mais informações, consulte [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/8-observability).

## Épicos
<a name="migrate-container-workloads-from-aro-to-rosa-epics"></a>

### Opção 1: usar um CI/CD pipeline
<a name="option-1-use-a-ci-cd-pipeline"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Adicione o novo cluster do ROSA ao Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador da AWS, administrador de sistemas da AWS, AWS DevOps | 
| Adicione o cliente `oc` aos seus nós do Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador da AWS, administrador de sistemas da AWS, AWS DevOps | 
| Crie uma nova ramificação do Git. | Crie uma nova ramificação no seu repositório Git para `rosa-dev`. Essa ramificação separa as alterações no código ou nos parâmetros de configuração do ROSA do seu pipeline existente. | AWS DevOps | 
| Marque as imagens do ROSA. | Em seu estágio de construção, use uma marcação diferente para identificar as imagens que são criadas a partir do pipeline ROSA. | Administrador da AWS, administrador de sistemas da AWS, AWS DevOps | 
| Crie um pipeline. | Crie um novo pipeline do Jenkins que seja semelhante ao seu pipeline existente. Para esse pipeline, use a ramificação `rosa-dev` do Git que você criou anteriormente e certifique-se de incluir o checkout, a verificação de código e os estágios de construção do Git que sejam idênticos ao seu pipeline existente. | Administrador da AWS, administrador de sistemas da AWS, AWS DevOps | 
| Adicione um estágio de implantação do ROSA. | No novo pipeline, adicione um estágio para implantação no cluster do ROSA e faça referência ao cluster do ROSA que você adicionou à configuração global do Jenkins. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Inicie uma nova compilação. | No Jenkins, selecione seu pipeline e escolha **Build now**, ou inicie uma nova compilação confirmando uma alteração na ramificação `rosa-dev` no Git. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Verificar a implantação. | Use o comando **oc** ou o [console do ROSA](https://console.aws.amazon.com/rosa) para verificar se a aplicação foi implantada no cluster do ROSA de destino. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Copie dados para o cluster de destino. | Para cargas de trabalho com estado, copie os dados do cluster de origem para o cluster de destino usando AWS DataSync ou usando utilitários de código aberto, como **rsync**, ou você pode usar o método MTC. Para obter mais informações, consulte a [documentação do AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html). | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Testar seu aplicativo | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Substituir. | Se o teste for bem-sucedido, use a política apropriada do Amazon Route 53 para mover o tráfego da aplicação hospedada no ARO para a aplicação hospedada no ROSA. Quando você concluir essa etapa, a workload da sua aplicação fará a transição completa para o cluster do ROSA. | Administrador da AWS, administrador de sistemas da AWS | 

### Opção 2: usar MTC
<a name="option-2-use-mtc"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale o operador do MTC. | Instale o operador MTC nos clusters ARO e ROSA:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Configure o tráfego de rede para o repositório de replicação. | Se você estiver usando um servidor proxy, configure-o para permitir o tráfego de rede entre o repositório de replicação e os clusters. O repositório de replicação é um objeto de armazenamento intermediário que o MTC usa para migrar dados. Os clusters de origem e de destino devem ter acesso de rede ao repositório de replicação durante a migração. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Adicione o cluster de origem ao MTC. | No console web MTC, adicione o cluster de origem ARO. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Adicione o Amazon S3 como seu repositório de replicação. | No console web da MTC, adicione o bucket do Amazon S3 (consulte [Pré-requisitos](#migrate-container-workloads-from-aro-to-rosa-prereqs)) como repositório de replicação. | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Criar um plano de migração. | No console web do MTC, crie um plano de migração e especifique o tipo de transferência de dados como **Cópia**. Isso instruirá a MTC a copiar os dados do cluster de origem (ARO) para o bucket do S3 e do bucket para o cluster de destino (ROSA). | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 
| Execute o plano de migração. | Execute o plano de migração usando a opção **Stage** ou **Cutover**:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrador da AWS, AWS DevOps, administrador de sistemas da AWS | 

## Solução de problemas
<a name="migrate-container-workloads-from-aro-to-rosa-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Problemas de conectividade | Ao migrar suas workloads de contêiner do ARO para o ROSA, você pode encontrar problemas de conectividade que devem ser resolvidos para garantir uma migração bem-sucedida. Para resolver esses problemas de conectividade (listados nesta tabela) durante a migração, um planejamento meticuloso, a coordenação com suas equipes de rede e segurança e testes completos são essenciais. A implementação de uma estratégia de migração gradual e a verificação da conectividade em cada etapa ajudarão a minimizar possíveis interrupções e garantir uma transição suave do ARO para o ROSA. | 
| Diferenças de configuração de rede | ARO e ROSA podem ter variações em suas configurações de rede, como configurações de rede virtual (VNet), sub-redes e políticas de rede. Para uma comunicação adequada entre os serviços, certifique-se de que as configurações de rede estejam alinhadas entre as duas plataformas. | 
| Grupo de segurança e regras de firewall | O ROSA e o ARO podem ter configurações de firewall e grupo de segurança padrão diferentes. Certifique-se de ajustar e atualizar essas regras para permitir que o tráfego necessário mantenha a conectividade entre contêineres e serviços durante a migração.  | 
| Alterações no endereço IP e no DNS | Quando você migra workloads, os endereços IP e os nomes DNS podem mudar. Reconfigure aplicativos que dependem de nomes DNS estáticos IPs ou específicos.  | 
| Acesso a serviços externos | Se seu aplicativo depender de serviços externos, como bancos de dados ou APIs, talvez seja necessário atualizar suas configurações de conexão para garantir que eles possam se comunicar com os novos serviços do ROSA. | 
| Configuração do Azure Private Link | Se você usa o Azure Private Link ou serviços de endpoint privados no ARO, precisará configurar a funcionalidade equivalente no ROSA para garantir a conectividade privada entre os recursos. | 
| Site-to-Site VPN ou Direct Connect configuração  | Se houver Direct Connect conexões existentes Site-to-Site VPN ou entre sua rede local e o ARO, você precisará estabelecer conexões semelhantes com o ROSA para comunicação ininterrupta com seus recursos locais. | 
| Configurações de entrada e do balanceador de carga | As configurações para controladores de entrada e balanceadores de carga podem ser diferentes entre ARO e ROSA. Redefina essas configurações para manter o acesso externo aos seus serviços. | 
| Tratamento de certificados e TLS | Se suas aplicações usarem certificados SSL ou TLS, verifique se os certificados são válidos e configurados corretamente no ROSA. | 
| Acessos do registro de contêiner | Se seus contêineres estiverem hospedados em um registro de contêiner externo, configure a autenticação adequada e as permissões de acesso para o ROSA. | 
| Monitorar e registrar em log | Atualize as configurações de monitoramento e registro em log para refletir a nova infraestrutura no ROSA para que você possa continuar monitorando a integridade e a performance de seus contêineres de forma eficaz. | 

## Recursos relacionados
<a name="migrate-container-workloads-from-aro-to-rosa-resources"></a>

**AWS****referências**
+ [O que é Serviço Red Hat OpenShift na AWS?](https://docs.aws.amazon.com/ROSA/latest/userguide/what-is-rosa.html) (Documentação do ROSA)
+ [Get started with ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/getting-started.html) (documentação do ROSA)
+ [Serviço Red Hat OpenShift na AWS estratégias de implementação](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/) (AWS orientação prescritiva)
+ [Serviço Red Hat OpenShift na AWS Agora GA](https://aws.amazon.com/blogs/aws/red-hat-openshift-service-on-aws-now-generally-availably/) (postagem AWS no blog)
+ [ROSA Workshop](https://catalog.workshops.aws/aws-openshift-workshop/en-US/0-introduction)
+ [ROSA FAQ](https://aws.amazon.com/rosa/faqs/)
+ [ROSA Workshop FAQ](https://www.rosaworkshop.io/rosa/14-faq/)
+ [ROSA pricing](https://aws.amazon.com/rosa/pricing/)

** OpenShift Documentação da Red Hat**
+ [Instalando um cluster rapidamente em AWS](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-default.html)
+ [Instalando um cluster AWS em uma rede restrita](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.html)
+ [Instalando um cluster AWS em uma VPC existente](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-vpc.html)
+ [Instalando um cluster na infraestrutura provisionada pelo usuário usando modelos AWS CloudFormation ](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-user-infra.html)
+ [Instalando um cluster AWS em uma rede restrita com infraestrutura provisionada pelo usuário](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws.html)
+ [Instalando um cluster AWS com personalizações](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-customizations.html)
+ [Introdução à OpenShift CLI](https://docs.openshift.com/container-platform/4.13/cli_reference/openshift_cli/getting-started-cli.html)

## Mais informações
<a name="migrate-container-workloads-from-aro-to-rosa-additional"></a>

**Escolhendo entre as opções de MTC e reimplantação de CI/CD dutos**

A migração de aplicativos de um OpenShift cluster para outro exige uma análise cuidadosa. Idealmente, você desejaria uma transição suave usando um CI/CD pipeline para reimplantar o aplicativo e lidar com a migração de dados de volume persistentes. No entanto, na prática, uma aplicação em execução em um cluster é suscetível a mudanças imprevistas ao longo do tempo. Essas alterações podem fazer com que a aplicação se desvie gradualmente de seu estado original de implantação. A MTC oferece uma solução para cenários em que o conteúdo exato de um namespace é incerto e uma migração perfeita de todos os componentes da aplicação para um novo cluster é importante.

Fazer a escolha certa exige avaliar seu cenário específico e pesar os benefícios de cada abordagem. Ao fazer isso, você pode garantir uma migração bem-sucedida e perfeita, alinhada às suas necessidades e prioridades. Aqui estão as diretrizes adicionais para a escolha entre as duas opções.

**Reimplantação do pipeline de CI/CD**

O método de CI/CD pipeline é a abordagem recomendada se seu aplicativo puder ser reimplantado com confiança usando um pipeline. Isso garante que a migração seja controlada, previsível e alinhada às suas práticas de implantação existentes. Ao escolher esse método, você pode usar estratégias de [implantação azul/verde](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html) ou de implantação canário para transferir gradualmente a carga para implantações no ROSA. Para esse cenário, esse padrão pressupõe que o Jenkins esteja orquestrando implantações de aplicações a partir do ambiente on-premises.

Vantagens:
+ Você não precisa de acesso administrativo ao cluster ARO de origem nem precisa implantar nenhum operador no cluster de origem ou de destino.
+ Essa abordagem ajuda você a mudar o tráfego gradualmente usando uma DevOps estratégia.

Desvantagens:
+ É preciso mais esforço para testar a funcionalidade da sua aplicação.
+ Se seu aplicativo contiver dados persistentes, ele precisará de etapas adicionais para copiar os dados usando AWS DataSync ou outras ferramentas.

**Migração MTC**

No mundo real, as aplicações em execução podem passar por mudanças imprevistas que fazem com que eles se afastem da implantação inicial. Escolha a opção MTC quando não tiver certeza sobre o estado atual da sua aplicação no cluster de origem. Por exemplo, se seu ecossistema de aplicações abrange vários componentes, configurações e volumes de armazenamento de dados, recomendamos que você escolha o MTC para garantir uma migração completa que abranja a aplicação e todo o seu ambiente.

Vantagens:
+ O MTC fornece backup e restauração completos da workload.
+ Ele copiará os dados persistentes da origem para o destino durante a migração da workload.
+ Ele não requer acessos ao repositório de código-fonte.

Desvantagens:
+ Você precisa de privilégios administrativos para instalar o operador MTC nos clusters de origem e destino.
+ A DevOps equipe precisa de treinamento para usar a ferramenta MTC e realizar migrações. 

# Execute tarefas do Amazon ECS na Amazon WorkSpaces com o Amazon ECS Anywhere
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere"></a>

*Akash Kumar, Amazon Web Services*

## Resumo
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-summary"></a>

O Amazon Elastic Container Service (Amazon ECS) Anywhere é compatível com a implantação de tarefas do Amazon ECS em qualquer ambiente, incluindo a infraestrutura gerenciada pelo Amazon Web Services (AWS) e a infraestrutura gerenciada pelo cliente. Você pode fazer isso usando um ambiente de gerenciamento totalmente gerenciado pela AWS, executado na nuvem e sempre atualizado. 

As empresas costumam usar a Amazon WorkSpaces para desenvolver aplicativos baseados em contêineres. Isso exigiu o Amazon Elastic Compute Cloud (Amazon EC2) ou o AWS Fargate com um cluster Amazon ECS para testar e executar tarefas do ECS. Agora, usando o Amazon ECS Anywhere, você pode adicionar a WorkSpaces Amazon como instâncias externas diretamente a um cluster do ECS e executar suas tarefas diretamente. Isso reduz seu tempo de desenvolvimento, porque você pode testar seu contêiner com um cluster ECS localmente na Amazon WorkSpaces. Você também pode economizar o custo de usar EC2 nossas instâncias Fargate para testar seus aplicativos de contêiner.

Esse padrão mostra como implantar tarefas do ECS na Amazon WorkSpaces com o Amazon ECS Anywhere. Ele configura o cluster do ECS e usa o AWS Directory Service Simple AD para iniciar o. WorkSpaces Em seguida, o exemplo de tarefa do ECS inicia o NGINX no. WorkSpaces

## Pré-requisitos e limitações
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-prereqs"></a>
+ Uma conta AWS ativa
+ AWS Command Line Interface (AWS CLI)
+ Credenciais da AWS [configuradas em sua máquina](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)

## Arquitetura
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-architecture"></a>

**Pilha de tecnologias de destino**
+ Uma nuvem privada virtual (VPC).
+ Um cluster do Amazon ECS
+ Amazon WorkSpaces
+ AWS Directory Service com Simple AD

**Arquitetura de destino**

![\[O ECS Anywhere configura o cluster ECS e usa o Simple AD para iniciar. WorkSpaces\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/da8b2249-3423-485c-9fef-6f902025e969/images/fd354d14-f29b-4b9e-8f1a-c3cb7ed4d6bf.png)


 

A arquitetura inclui os seguintes serviços e recursos:
+ Um cluster do ECS com sub-redes públicas e privadas em uma VPC personalizada
+ Simple AD na VPC para fornecer acesso ao usuário à Amazon WorkSpaces
+ Amazon WorkSpaces provisionada na VPC usando Simple AD
+ AWS Systems Manager ativado para adicionar a Amazon WorkSpaces como instâncias gerenciadas
+ Usando o Amazon ECS e o AWS Systems Manager Agent (SSM Agent), a Amazon WorkSpaces adicionou ao Systems Manager e ao cluster ECS
+ Um exemplo de tarefa do ECS a ser executada WorkSpaces no cluster do ECS

## Ferramentas
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-tools"></a>
+ O [Simple Active Directory (Simple AD) do AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_simple_ad.html) é um diretório gerenciado autônomo alimentado por um servidor compatível com o Samba 4 Active Directory. O Simple AD fornece um subconjunto dos recursos oferecidos pelo AWS Managed Microsoft AD, incluindo a capacidade de gerenciar usuários e se conectar com segurança às instâncias da Amazon. EC2 
+ O [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) é um serviço de gerenciamento de contêineres escalável e rápido que facilita a execução, a interrupção e o gerenciamento de contêineres em um cluster.
+ 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 Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) ajuda você a gerenciar seus aplicativos e infraestrutura em execução na nuvem AWS. Isso simplifica o gerenciamento de aplicações e recursos, diminui o tempo para detectar e resolver problemas operacionais e ajuda você a gerenciar seus recursos da AWS de modo seguro e em grande escala.
+  WorkSpacesA [Amazon](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html) ajuda você a provisionar desktops Microsoft Windows ou Amazon Linux virtuais baseados em nuvem para seus usuários, conhecidos como. *WorkSpaces* WorkSpaces elimina a necessidade de adquirir e implantar hardware ou instalar software complexo.

## Épicos
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-epics"></a>

### Configurar o cluster ECS
<a name="set-up-the-ecs-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar e configurar o cluster ECS. | Para criar o cluster ECS, siga as instruções na [documentação da AWS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html), incluindo as seguintes etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.html) | Arquiteto de nuvem | 

### Lance a Amazon WorkSpaces
<a name="launch-amazon-workspaces"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o Simple AD e inicie a Amazon WorkSpaces. | Para provisionar um diretório Simple AD para sua VPC recém-criada e iniciar a Amazon WorkSpaces, siga as instruções na documentação da [AWS](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html). | Arquiteto de nuvem | 

### Configuração do AWS Systems Manager para um ambiente híbrido
<a name="set-up-aws-systems-manager-for-a-hybrid-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Baixe os scripts anexados. | Em sua máquina local, baixe os arquivos `ssm-trust-policy.json` e `ssm-activation.json` que estão na seção *Anexos*. | Arquiteto de nuvem | 
| Adicionar o perfil do IAM. | Adicionar variáveis de ambiente com base nos requisitos da sua empresa.<pre>export AWS_DEFAULT_REGION=${AWS_REGION_ID}<br />export ROLE_NAME=${ECS_TASK_ROLE}<br />export CLUSTER_NAME=${ECS_CLUSTER_NAME}<br />export SERVICE_NAME=${ECS_CLUSTER_SERVICE_NAME}</pre>Execute o comando a seguir.<pre>aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://ssm-trust-policy.json</pre> | Arquiteto de nuvem | 
| Adicione a SSMManaged InstanceCore política da Amazon à função do IAM. | Execute o comando a seguir.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore</pre> | Arquiteto de nuvem | 
| Adicione a política do Amazon EC2 ContainerServicefor EC2 Role à função do IAM. | Execute o comando a seguir.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role</pre> | Arquiteto de nuvem | 
| Verificar o perfil do IAM. | Para verificar o perfil do IAM, excute o comando a seguir.<pre>aws iam list-attached-role-policies --role-name $ROLE_NAME</pre> | Arquiteto de nuvem | 
| Ativar o Systems Manager. | Execute o comando a seguir.<pre>aws ssm create-activation --iam-role $ROLE_NAME | tee ssm-activation.json</pre> | Arquiteto de nuvem | 

### Adicionar WorkSpaces ao cluster ECS
<a name="add-workspaces-to-the-ecs-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Conecte-se ao seu WorkSpaces. | Para se conectar e configurar seus espaços de trabalho, siga as instruções na [documentação da AWS](https://docs.aws.amazon.com/workspaces/latest/userguide/workspaces-user-getting-started.html). | Desenvolvedor de aplicativos | 
| Baixar o script de instalação do ecs-anywhere. | No prompt de comando, execute o seguinte comando da .<pre>curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh" && sudo chmod +x ecs-anywhere-install.sh</pre> | Desenvolvedor de aplicativos | 
| Verificar a integridade do script de shell. | (Opcional) Execute o seguinte comando.<pre>curl -o "ecs-anywhere-install.sh.sha256" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh.sha256" && sha256sum -c ecs-anywhere-install.sh.sha256<br /><br /><br /></pre> | Desenvolvedor de aplicativos | 
| Adicionar um repositório EPEL no Linux do Amazon. | Para adicionar um repositório de Extra Packages for Enterprise Linux (EPEL), execute o comando `sudo amazon-linux-extras install epel -y`. | Desenvolvedor de aplicativos | 
| Instalar o Amazon ECS Anywhere. | Para executar o script de instalação, use o seguinte comando.<pre>sudo ./ecs-anywhere-install.sh --cluster $CLUSTER_NAME --activation-id $ACTIVATION_ID --activation-code $ACTIVATION_CODE --region $AWS_REGION<br /><br /><br /></pre> |  | 
| Verificar as informações da instância do cluster ECS. | Para verificar as informações da instância de cluster do Systems Manager e do ECS e validar as que WorkSpaces foram adicionadas ao cluster, execute o comando a seguir em sua máquina local.<pre>aws ssm describe-instance-information" && "aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | Desenvolvedor de aplicativos | 

### Adicione uma tarefa do ECS para o WorkSpaces
<a name="add-an-ecs-task-for-the-workspaces"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um perfil do IAM de execução de tarefas | Baixar `task-execution-assume-role.json` e `external-task-definition.json` na seção *Anexos*. Execute o seguinte comando na máquina local.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json</pre> | Arquiteto de nuvem | 
| Adicione a política à função de execução. | Execute o comando a seguir.<pre>aws iam --region $AWS_DEFAULT_REGION attach-role-policy --role-name $ECS_TASK_EXECUTION_ROLE --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy</pre> | Arquiteto de nuvem | 
| Crie um perfil de tarefas. | Execute o comando a seguir.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json<br /><br /><br /></pre> | Arquiteto de nuvem | 
| Registre a definição de tarefa para o cluster. | Execute o seguinte comando na máquina local.<pre>aws ecs register-task-definition --cli-input-json file://external-task-definition.json</pre> | Arquiteto de nuvem | 
| Execute a tarefa. | Execute o seguinte comando na máquina local.<pre>aws ecs run-task --cluster $CLUSTER_NAME --launch-type EXTERNAL --task-definition nginx</pre> | Arquiteto de nuvem | 
| Validar o estado de execução da tarefa. | Para obter o ID da tarefa, execute o comando a seguir.<pre>export TEST_TASKID=$(aws ecs list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns[0]')</pre>Com o ID da tarefa, execute o seguinte comando.<pre>aws ecs describe-tasks --cluster $CLUSTER_NAME --tasks ${TEST_TASKID}</pre> | Arquiteto de nuvem | 
| Verifique a tarefa no WorkSpace. | Para verificar se o NGINX está sendo executado no WorkSpace, execute o comando. ` curl http://localhost:8080` | Desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-resources"></a>
+ [Clusters do ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Configurar ambientes híbridos](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)
+ [Amazon WorkSpaces](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html)
+ [Simple AD](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html)

## Anexos
<a name="attachments-da8b2249-3423-485c-9fef-6f902025e969"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo:[ attachment.zip](samples/p-attach/da8b2249-3423-485c-9fef-6f902025e969/attachments/attachment.zip)

# Execute um contêiner Docker da API web ASP.NET Core em uma instância Amazon Linux EC2
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

*Vijai Anand Ramalingam e Sreelaxmi Pai, Amazon Web Services*

## Resumo
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-summary"></a>

Esse padrão é para pessoas que estão começando a conteinerizar seus aplicativos na Nuvem da Amazon Web Services (AWS). Quando você começa a conteinerizar aplicativos na nuvem, geralmente não há plataformas de orquestração de contêineres configuradas. Esse padrão ajuda você a configurar rapidamente a infraestrutura na AWS para testar suas aplicações em contêineres sem precisar de uma infraestrutura elaborada de orquestração de contêineres.

A primeira etapa na jornada de modernização é transformar o aplicativo. Se for uma aplicação herdada do .NET Framework, você deve primeiro alterar o runtime para o ASP.NET Core. Faça o seguinte:
+ Crie a imagem de contêiner do Docker
+ Execute o contêiner do Docker usando a imagem criada
+ Valide a aplicação antes de implantá-la em qualquer plataforma de orquestração de contêiner, como Amazon Elastic Container Service (Amazon ECS) ou Amazon Elastic Kubernetes Service (Amazon EKS). 

Esse padrão abrange os aspectos de construção, execução e validação do desenvolvimento de aplicativos modernos em uma instância Linux do Amazon Elastic Compute Cloud EC2 (Amazon).

## Pré-requisitos e limitações
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**Pré-requisitos **
+ Uma conta da [Amazon Web Services (AWS)](https://aws.amazon.com/account/) 
+ Um perfil do [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) com acesso suficiente ao IAM para criar recursos da AWS para esse padrão. 
+ [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) ou versão mais recente baixado e instalado
+ Um projeto do .NET Framework modernizado para o ASP.NET Core
+ Um GitHub repositório

**Versões do produto**
+ Visual Studio Community 2022 ou versão mais recente

## Arquitetura
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-architecture"></a>

**Arquitetura de destino**

Esse padrão usa um [ CloudFormation modelo da AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) para criar a arquitetura altamente disponível mostrada no diagrama a seguir. Uma instância Amazon EC2 Linux é executada em uma sub-rede privada. O AWS Systems Manager Session Manager é usado para acessar a instância privada Amazon EC2 Linux e testar a API em execução no contêiner Docker.

![\[Um usuário acessando a instância Amazon EC2 Linux e testando a API em execução no contêiner do Docker.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. Acessar a instância Linux por meio do Session Manager

## Ferramentas
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-tools"></a>

**Serviços da AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): a AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto para interagir com serviços da AWS por meio de comandos no seu shell de linha de comando. Com configuração mínima, você pode executar comandos da AWS CLI que implementam funcionalidade equivalente àquela fornecida pelo Console de Gerenciamento da AWS baseado em navegador.
+ [Console de Gerenciamento da AWS](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html): o Console de Gerenciamento da AWS é um aplicativo web que compreende e se refere a uma ampla coleção de consoles de serviço para gerenciar recursos da AWS. Quando você faz login pela primeira vez, vê a página inicial do console. A página inicial fornece acesso a todos os consoles de serviço e oferece um único local para acessar as informações necessárias para executar as tarefas da AWS relacionadas.
+ [Session Manager do AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html): o Session Manager é um recurso totalmente gerenciado do AWS Systems Manager. Com o Session Manager, você pode gerenciar suas instâncias do Amazon Elastic Compute Cloud (Amazon EC2). O Session Manager fornece gerenciamento de nós seguro e auditável sem a necessidade de abrir portas de entrada, manter bastion hosts ou gerenciar chaves SSH.

**Outras ferramentas**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/): o Visual Studio 2022 é um ambiente de desenvolvimento integrado (IDE).
+ [Docker](https://www.docker.com/): o Docker é 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.

**Código **

```
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
 WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"]
RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj"
COPY . .
WORKDIR "/src/DemoNetCoreWebAPI"
RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build
 
FROM build AS publish
RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]
```

## Épicos
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-epics"></a>

### Desenvolver a API Web ASP.NET Core
<a name="develop-the-asp-net-core-web-api"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar uma API Web ASP.NET Core usando o Visual Studio. | Para criar um exemplo da ASP.NET Core Web API, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desenvolvedor de aplicativos | 
| Crie um Dockerfile. | Para criar um novo Dockerfile, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Para enviar as alterações ao seu GitHub repositório, execute o comando a seguir.<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | Desenvolvedor de aplicativos | 

### Configurar a instância Amazon EC2 Linux
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure a infraestrutura. | Inicie o [ CloudFormation modelo da AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) para criar a infraestrutura, que inclui o seguinte: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Para saber mais sobre como acessar uma EC2 instância privada da Amazon usando o Session Manager sem precisar de um host bastion, consulte a postagem do blog [Toward a bastion-less world](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/). | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Faça login na instância Amazon EC2 Linux. | Para se conectar à instância Amazon EC2 Linux na sub-rede privada, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desenvolvedor de aplicativos | 
| Instala e inicializa o Docker. | Para instalar e iniciar o Docker na instância Amazon EC2 Linux, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Acesse o Git e clone o repositório. | Para instalar o Git na instância Amazon EC2 Linux e clonar o repositório GitHub, faça o seguinte.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Compile e execute o contêiner do Docker. | Para criar a imagem do Docker e executar o contêiner dentro da instância Amazon EC2 Linux, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 

### Testar a API da web
<a name="test-the-web-api"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Testar a API da web usando o comando curl. | Para testar a API, Execute o comando a seguir.<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre>Verifique a resposta da API.Você pode obter os comandos curl para cada endpoint do Swagger ao executá-lo localmente. | Desenvolvedor de aplicativos | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua todos os recursos | Exclua a pilha para remover todos os recursos. Isso garante que você não seja cobrado por nenhum serviço que não esteja usando. | Administrador da AWS, AWS DevOps | 

## Recursos relacionados
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ [Conectar-se à instância do Linux no Windows usando PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)
+ [Criar uma API Web com o ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio)
+ [Toward a bastion-less world](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)

# Executar workloads monitoradas com armazenamento de dados persistente usando o Amazon EFS no Amazon EKS com o AWS Fargate
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate"></a>

*Ricardo Morais, Rodrigo Bersa e Lucio Pereira, Amazon Web Services*

## Resumo
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-summary"></a>

Este padrão fornece orientação para habilitar o Amazon Elastic File System (Amazon EFS) como um dispositivo de armazenamento para contêineres que estão sendo executados no Amazon Elastic Kubernetes Service (Amazon EKS) usando o AWS Fargate para provisionar seus recursos computacionais.

A configuração descrita nesse padrão segue as práticas recomendadas de segurança e fornece segurança em repouso e segurança em trânsito por padrão. Para criptografar seu sistema de arquivos Amazon EFS, ele usa uma chave do AWS Key Management Service (AWS KMS), mas você também pode especificar um alias de chave que despacha o processo de criação de uma chave KMS.

Você pode seguir as etapas desse padrão para criar um namespace e um perfil Fargate para um aplicativo proof-of-concept (PoC), instalar o driver Amazon EFS Container Storage Interface (CSI) usado para integrar o cluster Kubernetes ao Amazon EFS, configurar a classe de armazenamento e implantar o aplicativo PoC. Essas etapas resultam em um sistema de arquivos Amazon EFS que é compartilhado entre várias workloads do Kubernetes, executado no Fargate. O padrão é acompanhado por scripts que automatizam essas etapas.

Você pode usar este padrão se quiser garantir a persistência dos dados em suas aplicações em contêineres e evitar a perda de dados em operações de redução ou aumento da escala horizontalmente. Por exemplo:
+ **DevOps ferramentas** — Um cenário comum é desenvolver uma integração contínua e entrega contínua (CI/CD) strategy. In this case, you can use Amazon EFS as a shared file system to store configurations among different instances of the CI/CD tool or to store a cache (for example, an Apache Maven repository) for pipeline stages among different instances of the CI/CDferramenta).
+ **Servidores web**: um cenário comum é usar o Apache como um servidor web HTTP. Você pode usar o Amazon EFS como um sistema de arquivos compartilhado para armazenar arquivos estáticos que são compartilhados entre diferentes instâncias do servidor web. Neste cenário de exemplo, as modificações são aplicadas diretamente ao sistema de arquivos em vez de arquivos estáticos serem incorporados a uma imagem do Docker.

## Pré-requisitos e limitações
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um cluster do Amazon EKS com Kubernetes versão 1.17 ou posterior (testado até a versão 1.27)
+ Um sistema de arquivos Amazon EFS existente para vincular um Kubernetes StorageClass e provisionar sistemas de arquivos dinamicamente
+ Permissões de administração do cluster
+ Contexto configurado para apontar para o cluster Amazon EKS desejado

**Limitações**
+ Há algumas limitações a serem consideradas ao usar o Amazon EKS com o Fargate. Por exemplo, o uso de algumas construções do Kubernetes, como DaemonSets contêineres privilegiados, não é suportado. Para obter mais informações sobre as limitações do Fargate, consulte [Considerações sobre o AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html#fargate-considerations) na documentação do Amazon EKS.
+ O código fornecido com esse padrão é compatível com estações de trabalho que executam Linux ou macOS.

**Versões do produto**
+ AWS Command Line Interface (AWS CLI) versão 2 ou superior
+ Driver da CSI do Amazon EFS versão 1.0 ou posterior (testado até a versão 2.4.8)
+ eksctl versão 0.24.0 ou posterior (testado até a versão 0.158.0)
+ jq versão 1.6 ou posterior
+ Kubectl versão 1.17 ou posterior (testado até a versão 1.27)
+ Kubernetes versão 1.17 ou posterior (testado até a versão 1.27)

## Arquitetura
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-architecture"></a>

![\[Diagrama de arquitetura da execução de workloads monitoradas com armazenamento de dados persistente usando o Amazon EFS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/2487e285-269b-415b-a270-877f973e3aaf/images/ec8de63c-3307-4010-9e03-2bd7b9881fff.png)


A arquitetura de destino é composta pela seguinte infraestrutura:
+ Uma nuvem privada virtual (VPC).
+ Duas zonas de disponibilidade
+ Uma sub-rede pública com um gateway NAT que fornece acesso à Internet
+ Uma sub-rede privada com um cluster do Amazon EKS e destinos de montagem do Amazon EFS (também conhecidos como *pontos de montagem*)
+ Amazon EFS no nível da VPC

Veja abaixo a infraestrutura de ambiente para o cluster do Amazon EKS:
+ Perfis do AWS Fargate que acomodam os constructos do Kubernetes no nível do namespace
+ Um namespace Kubernetes com:
  + Dois pods de aplicações distribuídos em zonas de disponibilidade
  + Uma declaração de volume persistente (PVC) vinculada a um volume persistente (PV) no nível do cluster
+ Um PV em todo o cluster que está vinculado ao PVC no namespace e que aponta para os destinos de montagem do Amazon EFS na sub-rede privada, fora do cluster

## Ferramentas
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-tools"></a>

**Serviços da AWS**
+ A [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 você pode usar para interagir com os serviços da AWS por meio da linha de comando.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) ajuda você a criar e configurar sistemas de arquivos compartilhados na Nuvem AWS. Nesse padrão, ele fornece um sistema de arquivos simples, escalável, totalmente gerenciado e compartilhado para uso com o Amazon EKS.
+ O [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) ajuda você a executar o Kubernetes na AWS sem precisar instalar ou operar seus próprios clusters.
+ O [AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) é um mecanismo de computação de tecnologia sem servidor para o Amazon EKS. Ele cria e gerencia recursos computacionais para seus aplicativos Kubernetes.
+ O [AWS Key Management Service (AWS KMS) ](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)ajuda você a criar e controlar chaves criptográficas para proteger seus dados.

**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 [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) é utilitário de linha de comando para criar e gerenciar clusters do Kubernetes no Amazon EKS.
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) é uma interface de linha de comando que ajuda você na execução de comandos em clusters do Kubernetes.
+ O [jq](https://stedolan.github.io/jq/download/) é uma ferramenta de linha de comando para analisar JSON.

**Código **

O código desse padrão é fornecido na [Configuração de GitHub persistência com o Amazon EFS no Amazon EKS usando o repositório AWS Fargate](https://github.com/aws-samples/eks-efs-share-within-fargate). Os scripts são organizados por épico, nas pastas `epic01` a `epic06`, correspondendo à ordem na seção [Épicos](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics) neste padrão.

## Práticas recomendadas
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-best-practices"></a>

A arquitetura de destino inclui os seguintes serviços e componentes e segue as práticas recomendadas do [AWS Well-Architected Framework](https://aws.amazon.com/architecture/well-architected/):
+ Amazon EFS, que fornece um sistema de arquivos NFS elástico simples, escalável e totalmente gerenciado. Isso é usado como um sistema de arquivos compartilhado entre todas as replicações do aplicativo PoC que estão sendo executadas em pods, que são distribuídos nas sub-redes privadas do cluster Amazon EKS escolhido.
+ Um destino de montagem do Amazon EFS para cada sub-rede privada. Isso fornece redundância por zona de disponibilidade na nuvem privada virtual (VPC) do cluster.
+ Amazon EKS, que executa as workloads do Kubernetes. Você deve provisionar um cluster do Amazon EKS antes de usar esse padrão, conforme descrito na seção [Pré-requisitos](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs).
+ AWS KMS, que fornece criptografia em repouso para o conteúdo armazenado no sistema de arquivos Amazon EFS.
+ Fargate, que gerencia os recursos computacionais dos contêineres para que você possa se concentrar nos requisitos de negócios em vez da carga de infraestrutura. O perfil Fargate é criado para todas as sub-redes privadas. Ele fornece redundância por zona de disponibilidade na nuvem privada virtual (VPC) do cluster.
+ Pods do Kubernetes, para validar se o conteúdo pode ser compartilhado, consumido e gravado por diferentes instâncias de uma aplicação.

## Épicos
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics"></a>

### Provisionar um cluster do Amazon EKS (opcional)
<a name="provision-an-amazon-eks-cluster-optional"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um cluster do Amazon EKS. | Se você já tem um cluster implantado, passe para o próximo épico. Crie um cluster do Amazon EKS em sua conta da AWS. No [GitHub diretório](https://github.com/aws-samples/eks-efs-share-within-fargate/tree/master/bootstrap), use um dos padrões para implantar um cluster Amazon EKS usando Terraform ou eksctl. Para obter mais informações, consulte [Criação de um cluster para o Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) na documentação do Amazon EKS. No padrão Terraform, também há exemplos que mostram como: vincular perfis do Fargate ao seu cluster do Amazon EKS, criar um sistema de arquivos do Amazon EFS e implantar o driver CSI do Amazon EFS no seu cluster do Amazon EKS. | Administrador da AWS, administrador do Terraform ou eksctl, administrador do Kubernetes | 
| Exportar as variáveis de ambiente. | Executar o script env.sh. Isso fornece as informações necessárias para as próximas etapas.<pre>source ./scripts/env.sh<br />Inform the AWS Account ID:<br /><13-digit-account-id><br />Inform your AWS Region:<br /><aws-Region-code><br />Inform your Amazon EKS Cluster Name:<br /><amazon-eks-cluster-name><br />Inform the Amazon EFS Creation Token:<br /><self-genereated-uuid></pre>Caso não as tenha ainda, você pode obter todas as informações solicitadas acima com os seguintes comandos da CLI.<pre># ACCOUNT ID<br />aws sts get-caller-identity --query "Account" --output text</pre><pre># REGION CODE<br />aws configure get region</pre><pre># CLUSTER EKS NAME<br />aws eks list-clusters --query "clusters" --output text</pre><pre># GENERATE EFS TOKEN<br />uuidgen</pre> | Administrador de sistemas AWS | 

### Crie um namespace Kubernetes e um perfil Fargate vinculado
<a name="create-a-kubernetes-namespace-and-a-linked-fargate-profile"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um namespace do Kubernetes e um perfil do Fargate para workloads da aplicação. | Crie um namespace para receber as workloads do aplicativo que interagem com o Amazon EFS. Execute o script `create-k8s-ns-and-linked-fargate-profile.sh`. Você pode optar por usar um nome de namespace personalizado ou o namespace padrão fornecido `poc-efs-eks-fargate`.**Com um nome de namespace de aplicação personalizado:**<pre>export $APP_NAMESPACE=<CUSTOM_NAME><br />./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />-c "$CLUSTER_NAME" -n "$APP_NAMESPACE"</pre>**Sem um nome de namespace de aplicação personalizado:**<pre>./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />    -c "$CLUSTER_NAME"</pre>onde `$CLUSTER_NAME` é o nome do cluster do Amazon EKS. O parâmetro `-n <NAMESPACE>` é opcional; se não for informado, um nome de namespace padrão gerado será fornecido. | Usuário do Kubernetes com permissões concedidas | 

### Criar um sistema de arquivos do Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Gere um token exclusivo. | O Amazon EFS requer um token de criação para garantir uma operação idempotente (chamar a operação com o mesmo token de criação não tem efeito). Para atender a esse requisito, você deve gerar um token exclusivo por meio de uma técnica disponível. Por exemplo, você pode gerar um identificador universal exclusivo (UUID) para usar como um token de criação. | Administrador de sistemas AWS | 
| Criar um sistema de arquivos do Amazon EFS. | Crie o sistema de arquivos para receber os arquivos de dados que são lidos e gravados pelas workloads do aplicativo. Você pode criar um sistema de arquivos criptografado ou não criptografado. (Como prática recomendada, o código deste padrão cria um sistema criptografado para habilitar a criptografia em repouso por padrão.) Você pode usar uma chave do AWS KMS exclusiva e simétrica do AWS KMS para criptografar o sistema de arquivos. Se não for especificada, uma chave gerenciada pela AWS será usada.Use o script create-efs.sh para criar um sistema de arquivos Amazon EFS criptografado ou não criptografado, depois de gerar um token exclusivo para o Amazon EFS.**Com a criptografia em repouso, sem uma chave KMS:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>onde `$CLUSTER_NAME` é o nome do seu cluster Amazon EKS e `$EFS_CREATION_TOKEN` é um token de criação exclusivo para o sistema de arquivos.**Com a criptografia em repouso, com uma chave KMS:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>onde `$CLUSTER_NAME` é o nome do seu cluster Amazon EKS e `$EFS_CREATION_TOKEN` é um token de criação exclusivo para o sistema de arquivos, e `$KMS_KEY_ALIAS` é o alias para a chave do KMS.**Sem criptografia:**<pre>./scripts/epic02/create-efs.sh -d \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>onde `$CLUSTER_NAME` é o nome do seu cluster Amazon EKS, `$EFS_CREATION_TOKEN` é um token de criação exclusivo para o sistema de arquivos e `–d` desabilita a criptografia em repouso. | Administrador de sistemas AWS | 
| Crie um grupo de segurança. | Crie um grupo de segurança para permitir que o cluster do Amazon EKS acesse o sistema de arquivos do Amazon EFS. | Administrador de sistemas AWS | 
| Atualize a regra de entrada para o grupo de segurança. | Atualize as regras de entrada do grupo de segurança para permitir o tráfego de entrada nas seguintes configurações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.html) | Administrador de sistemas AWS | 
| Adicione um destino de montagem para cada sub-rede privada. | Para cada sub-rede privada do cluster Kubernetes, crie um destino de montagem para o sistema de arquivos e o grupo de segurança. | Administrador de sistemas AWS | 

### Instale componentes do Amazon EFS no cluster Kubernetes
<a name="install-amazon-efs-components-into-the-kubernetes-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implemente o driver da CSI do Amazon EFS. | Implemente o driver da CSI do Amazon EFS no cluster. O driver provisiona o armazenamento de acordo com as declarações de volume persistentes criadas pelas aplicações. Execute o script `create-k8s-efs-csi-sc.sh` para implantar o driver da CSI do Amazon EFS e a classe de armazenamento no cluster.<pre>./scripts/epic03/create-k8s-efs-csi-sc.sh</pre>Esse script usa o utilitário `kubectl`, portanto, certifique-se de que o contexto tenha sido configurado para apontar para o cluster do Amazon EKS desejado. | Usuário do Kubernetes com permissões concedidas | 
| Implante a classe de armazenamento. | Implante a classe de armazenamento no cluster do provisionador Amazon EFS (efs.csi.aws.com). | Usuário do Kubernetes com permissões concedidas | 

### Instale o aplicativo PoC no cluster Kubernetes
<a name="install-the-poc-application-into-the-kubernetes-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante o volume persistente. | Implante o volume persistente e vincule-o à classe de armazenamento criada e ao ID do sistema de arquivos Amazon EFS. O aplicativo usa o volume persistente para ler e gravar conteúdo. Você pode especificar qualquer tamanho para o volume persistente no campo de armazenamento. O Kubernetes requer esse campo, mas como o Amazon EFS é um sistema de arquivos elástico, ele não impõe nenhuma capacidade de sistema de arquivos. Você pode implantar o volume persistente com ou sem criptografia. (O driver CSI do Amazon EFS habilita a criptografia por padrão, como uma prática recomendada.) Execute o script `deploy-poc-app.sh` para implantar o volume persistente, a declaração de volume persistente e as duas workloads.**Com criptografia em trânsito:**<pre>./scripts/epic04/deploy-poc-app.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>onde `$EFS_CREATION_TOKEN` é o token de criação exclusivo para o sistema de arquivos.**Sem criptografia em trânsito:**<pre>./scripts/epic04/deploy-poc-app.sh -d \<br />    -t "$EFS_CREATION_TOKEN"</pre>onde `$EFS_CREATION_TOKEN` é o token de criação exclusivo para o sistema de arquivos e `–d` desativa a criptografia em trânsito. | Usuário do Kubernetes com permissões concedidas | 
| Implante a declaração de volume persistente solicitada pelo aplicativo. | Implante a declaração de volume persistente solicitada pelo aplicativo e vincule-a à classe de armazenamento. Use o mesmo modo de acesso do volume persistente que você criou anteriormente. Você pode especificar qualquer tamanho para a reivindicação de volume persistente no campo de armazenamento. O Kubernetes requer esse campo, mas como o Amazon EFS é um sistema de arquivos elástico, ele não impõe nenhuma capacidade de sistema de arquivos. | Usuário do Kubernetes com permissões concedidas | 
| Implante a workload 1. | Implante o pod que representa a workload 1 do aplicativo. Essa workload grava conteúdo no arquivo `/data/out1.txt`. | Usuário do Kubernetes com permissões concedidas | 
| Implante a workload 2. | Implante o pod que representa a workload 2 do aplicativo. Essa workload grava conteúdo no arquivo `/data/out2.txt`. | Usuário do Kubernetes com permissões concedidas | 

### Valide a persistência, a durabilidade e a capacidade de compartilhamento do sistema de arquivos
<a name="validate-file-system-persistence-durability-and-shareability"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique o status de `PersistentVolume`. | Para conferir o status do `PersistentVolume`, insira o comando a seguir.<pre>kubectl get pv</pre>Para obter um exemplo de saída, consulte a seção [ Informações adicionais](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Usuário do Kubernetes com permissões concedidas | 
| Verifique o status de `PersistentVolumeClaim`. | Para conferir o status do `PersistentVolumeClaim`, insira o comando a seguir.<pre>kubectl -n poc-efs-eks-fargate get pvc</pre>Para obter um exemplo de saída, consulte a seção [ Informações adicionais](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Usuário do Kubernetes com permissões concedidas | 
| Validar se a workload 1 pode gravar no sistema de arquivos. | Insira o seguinte comando para validar se a workload 1 está gravando em `/data/out1.txt`.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt</pre>Os resultados são semelhantes ao seguinte:<pre>...<br />Thu Sep  3 15:25:07 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:12 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:17 UTC 2023 - PoC APP 1<br />...</pre> | Usuário do Kubernetes com permissões concedidas | 
| Validar se a workload 2 pode gravar no sistema de arquivos. | Insira o seguinte comando para validar se a workload 2 está gravando em `/data/out2.txt`.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt</pre>Os resultados são semelhantes ao seguinte:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Usuário do Kubernetes com permissões concedidas | 
| Validar se a workload 1 pode ler o arquivo gravado pela workload 2. | Insira o comando a seguir para validar que a workload 1 pode ler o arquivo `/data/out2.txt` gravado pela workload 2:<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt</pre>Os resultados são semelhantes ao seguinte:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Usuário do Kubernetes com permissões concedidas | 
| Validar se a workload 2 pode ler o arquivo gravado pela workload 1. | Insira o comando a seguir para validar que a workload 2 pode ler o arquivo `/data/out1.txt` gravado pela workload 1:<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt</pre>Os resultados são semelhantes ao seguinte:<pre>...<br />Thu Sep  3 15:29:22 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:27 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:32 UTC 2023 - PoC APP 1<br />...</pre> | Usuário do Kubernetes com permissões concedidas | 
| Valide se os arquivos são retidos após a remoção dos componentes do aplicativo. | Em seguida, use um script para remover os componentes da aplicação (volume persistente, declaração de volume persistente e pods) e verifique se os arquivos `/data/out1.txt` e `/data/out2.txt` estão retidos no sistema de arquivos. Execute o script `validate-efs-content.sh` usando o comando a seguir.<pre>./scripts/epic05/validate-efs-content.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>onde `$EFS_CREATION_TOKEN` é o token de criação exclusivo para o sistema de arquivos.Os resultados são semelhantes ao seguinte:<pre>pod/poc-app-validation created<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Results from execution of 'find /data' on validation process pod:<br />/data<br />/data/out2.txt<br />/data/out1.txt</pre> | Usuário do Kubernetes com permissões concedidas, administrador do sistema | 

### Monitore as operações
<a name="monitor-operations"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Monitore os registros do aplicativo. | Como parte de uma operação do segundo dia, envie os registros do aplicativo para a Amazon CloudWatch para monitoramento. | Administrador de sistemas da AWS, usuário do Kubernetes com permissões concedidas | 
| Monitore os contêineres do Amazon EKS e do Kubernetes com o Container Insights. | Como parte de uma operação do segundo dia, monitore os sistemas Amazon EKS e Kubernetes usando o Amazon Container Insights. CloudWatch Essa ferramenta coleta, agrega e resume métricas de aplicações em contêineres em diferentes níveis e dimensões. Para obter mais informações, consulte a seção [Recursos relacionados](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | Administrador de sistemas da AWS, usuário do Kubernetes com permissões concedidas | 
| Monitore o Amazon EFS com CloudWatch. | Como parte de uma operação do segundo dia, monitore os sistemas de arquivos usando a Amazon CloudWatch, que coleta e processa dados brutos do Amazon EFS em métricas legíveis e quase em tempo real. Para obter mais informações, consulte a seção [Recursos relacionados](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | Administrador de sistemas AWS | 

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


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Limpe todos os recursos criados para o padrão. | Depois de concluir esse padrão, limpe todos os recursos para evitar incorrer em cobranças da AWS. Execute o script `clean-up-resources.sh` para remover todos os recursos depois de terminar de usar a aplicação PoC. Escolha uma das seguintes opções:**Com a criptografia em repouso, com uma chave KMS:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>onde `$CLUSTER_NAME` é o nome do seu cluster Amazon EKS, `$EFS_CREATION_TOKEN` é o token de criação exclusivo para o sistema de arquivos e `$KMS_KEY_ALIAS` é o alias da chave KMS.**Sem criptografia em repouso:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>onde `$CLUSTER_NAME` é o nome do seu cluster Amazon EKS e `$EFS_CREATION_TOKEN` é um token de criação para o sistema de arquivos. | Usuário do Kubernetes com permissões concedidas, administrador do sistema | 

## Recursos relacionados
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources"></a>

**Referências**
+ [AWS Fargate for Amazon EKS now supports Amazon EFS](https://aws.amazon.com/blogs/aws/new-aws-fargate-for-amazon-eks-now-supports-amazon-efs/) (anúncio)
+ [How to capture application logs when using Amazon EKS on AWS Fargate (Como capturar registros de aplicativos ao usar o Amazon EKS no AWS Fargate)](https://aws.amazon.com/blogs/containers/how-to-capture-application-logs-when-using-amazon-eks-on-aws-fargate/) (publicação do blog)
+ [Usando o Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) ( CloudWatch documentação da Amazon)
+ [Configuração do Container Insights no Amazon EKS e no Kubernetes (documentação da Amazon)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy-container-insights-EKS.html) CloudWatch 
+ [Métricas do Amazon EKS e do Kubernetes Container Insights (documentação da Amazon)](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html) CloudWatch 
+ [Monitoramento do Amazon EFS com a Amazon CloudWatch](https://docs.aws.amazon.com/efs/latest/ug/monitoring-cloudwatch.html) (documentação do Amazon EFS)

**GitHub tutoriais e exemplos**
+ [Static provisioning (Provisionamento estático)](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md)
+ [Criptografia em trânsito](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/encryption_in_transit/README.md)
+ [Accessing the file system from multiple pods (Accessing the file system from multiple pods)](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/multiple_pods/README.md)
+ [Consumindo o Amazon EFS em StatefulSets](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/statefulset/README.md)
+ [Mounting subpaths (Montagem de subcaminhos)](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/volume_path/README.md)
+ [Using Amazon EFS access points (Uso de pontos de acesso do Amazon EFS)](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/access_points/README.md)
+ [Amazon EKS Blueprints for Terraform](https://aws-ia.github.io/terraform-aws-eks-blueprints/)

**Ferramentas necessárias**
+ [Instalação da AWS CLI versão 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
+ [Instalação do eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)
+ [Instalação do kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ [Instalação do jq](https://stedolan.github.io/jq/download/)

## Mais informações
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional"></a>

Veja abaixo um exemplo de saída do comando `kubectl get pv`.

```
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS   REASON   AGE
poc-app-pv   1Mi        RWX            Retain           Bound    poc-efs-eks-fargate/poc-app-pvc   efs-sc                  3m56s
```

Veja abaixo um exemplo de saída do comando `kubectl -n poc-efs-eks-fargate get pvc`.

```
NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
poc-app-pvc   Bound    poc-app-pv   1Mi        RWX            efs-sc         4m34s
```

# Configuração do ajuste de escala automático orientado por eventos no Amazon EKS usando o Identidade de Pods do Amazon EKS e o KEDA
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi e Mahendra Revanasiddappa, Amazon Web Services*

## Resumo
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Plataformas de orquestração, como o [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html), simplificaram o gerenciamento do ciclo de vida de aplicações baseadas em contêineres. Isso ajuda as organizações a se concentrarem na criação, proteção, operação e manutenção de aplicações baseadas em contêineres. À medida que as implantações orientadas por eventos se tornam mais comuns, as organizações estão escalando com mais frequência as implantações do Kubernetes com base em várias fontes de eventos. Esse método, combinado com o ajuste de escala automático, pode resultar em economias de custo significativas ao fornecer recursos computacionais sob demanda e escalabilidade eficiente, adaptada à lógica da aplicação.

O [KEDA](https://keda.sh/) é um autoescalador baseado no Kubernetes orientado por eventos. O KEDA ajuda você a escalar qualquer contêiner no Kubernetes com base no número de eventos que precisam ser processados. Ele é leve e se integra a qualquer cluster do Kubernetes. Ele também funciona com componentes padrão do Kubernetes, como o [ajuste de escala automático de pod horizontal](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (HPA). A KEDA também oferece [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication)um recurso que ajuda você a delegar a autenticação. Ele permite que você descreva os parâmetros de autenticação separados dos contêineres ScaledObject e de implantação.

AWS fornece funções AWS Identity and Access Management (IAM) que oferecem suporte a diversas opções de implantação do Kubernetes, incluindo Amazon EKS, Amazon EKS Anywhere Serviço Red Hat OpenShift na AWS (ROSA) e clusters de Kubernetes autogerenciados no Amazon Elastic Compute Cloud (Amazon). EC2 Essas funções usam construções do IAM, como provedores de identidade OpenID Connect (OIDC) e políticas de confiança do IAM, para operar em diferentes ambientes sem depender diretamente dos serviços do Amazon EKS ou. APIs Para obter mais informações, consulte [Perfis do IAM para contas de serviço](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) na documentação do Amazon EKS.

A [Identidade de Pods do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) simplifica o processo para que as contas de serviço do Kubernetes assumam perfis do IAM sem exigir provedores de OIDC. Ela fornece a capacidade de gerenciar credenciais para suas aplicações. Em vez de criar e distribuir suas AWS credenciais para os contêineres ou usar a função da EC2 instância da Amazon, você associa uma função do IAM a uma conta de serviço do Kubernetes e configura seus pods para usar a conta de serviço. Isso ajuda você a usar um perfil do IAM em vários clusters e simplifica o gerenciamento de políticas ao permitir a reutilização de políticas de permissão em todos os perfis do IAM.

Ao implementar o KEDA com a Identidade de Pods do Amazon EKS, as empresas podem implantar o ajuste de escala automático eficiente orientado por eventos e o gerenciamento simplificado de credenciais. As aplicações são dimensionadas com base na demanda, o que otimiza a utilização dos recursos e reduz os custos.

Este padrão ajuda você a integrar a Identidade de Pods do Amazon EKS com o KEDA. Ele mostra como você pode usar a conta de serviço `keda-operator` e delegar a autenticação com `TriggerAuthentication`. Também descreve como configurar uma relação de confiança entre um perfil do IAM para o operador do KEDA e um perfil do IAM para a aplicação. Essa relação de confiança permite que o KEDA monitore mensagens nas filas de eventos e ajuste a escala para os objetos do Kubernetes de destino.

## Pré-requisitos e limitações
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Pré-requisitos **
+ AWS Command Line Interface [(AWS CLI) versão 2.13.17 ou posterior, instalada](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ Python versão 3.11.5 ou posterior, [instalado](https://www.python.org/downloads/)
+ AWS SDK para Python (Boto3) [versão 1.34.135 ou posterior, instalada](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ Helm versão 3.12.3 ou posterior, [instalado](https://helm.sh/docs/intro/install/)
+ kubectl versão 1.25.1 ou posterior, [instalado](https://kubernetes.io/docs/tasks/tools/)
+ Docker Engine versão 26.1.1 ou posterior, [instalado](https://docs.docker.com/engine/install/)
+ Um cluster do Amazon EKS versão 1.24 ou posterior, [criado](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Pré-requisitos para criar o agente da Identidade de Pods do Amazon EKS, [atendidos](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create)

**Limitações**
+ É necessário que você estabeleça uma relação de confiança entre o perfil `keda-operator` e o perfil `keda-identity`. As instruções são fornecidas na seção [Épicos](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) deste padrão.

## Arquitetura
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

Nesse padrão, você cria os seguintes AWS recursos:
+ **Repositório do Amazon Elastic Container Registry (Amazon ECR)**: neste padrão, esse repositório se chama `keda-pod-identity-registry`. Esse repositório privado é usado para armazenar imagens do Docker da aplicação de exemplo.
+ **Fila do Amazon Simple Queue Service (Amazon SQS)**: neste padrão, essa fila se chama `event-messages-queue`. A fila funciona como um buffer de mensagens que coleta e armazena as mensagens recebidas. O KEDA monitora as métricas da fila, como contagem de mensagens ou comprimento da fila, e escala automaticamente a aplicação com base nessas métricas.
+ **Perfil do IAM para a aplicação**: neste padrão, esse perfil se chama `keda-identity`. O perfil `keda-operator` assume esse perfil. Esse perfil permite o acesso à fila do Amazon SQS.
+ **Perfil do IAM para o operador do KEDA**: neste padrão, esse perfil se chama `keda-operator`. O operador KEDA usa essa função para fazer as chamadas de AWS API necessárias. Esse perfil tem permissões para assumir o perfil `keda-identity`. Devido à relação de confiança entre o `keda-operator` e os perfis `keda-identity`, o perfil `keda-operator` tem permissões do Amazon SQS.

Por meio dos recursos personalizados `TriggerAuthentication` e `ScaledObject` do Kubernetes, o operador usa o perfil `keda-identity` para se conectar a uma fila do Amazon SQS. Com base no tamanho da fila, o KEDA escala automaticamente a implantação da aplicação. Ele adiciona um pod para cada cinco mensagens não lidas na fila. Na configuração padrão, se não houver mensagens não lidas na fila do Amazon SQS, a escala da aplicação é reduzida verticalmente para zero pods. O operador do KEDA monitora a fila em um intervalo especificado.

 

A imagem a seguir mostra como você usa a Identidade de Pods do Amazon EKS para fornecer ao perfil `keda-operator` acesso seguro à fila do Amazon SQS.

![\[Usando o KEDA e a Identidade de Pods do Amazon EKS para escalar automaticamente uma aplicação baseada em Kubernetes.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Você instala o agente da Identidade de Pods do Amazon EKS no cluster do Amazon EKS.

1. Você implanta o operador do KEDA no namespace do cluster do Amazon EKS.

1. Você cria os papéis `keda-operator` e `keda-identity` IAM no alvo Conta da AWS.

1. Você estabelece uma relação de confiança entre os perfis do IAM.

1. Você implanta a aplicação no namespace `security`.

1. O operador do KEDA enfileira as mensagens em uma fila do Amazon SQS.

1. O KEDA inicia o HPA, que escala automaticamente a aplicação com base no tamanho da fila.

## Ferramentas
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

**Serviços da AWS**
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.
+ [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.

**Outras ferramentas**
+ O [KEDA](https://keda.sh/) é um autoescalador baseado no Kubernetes orientado por eventos.

**Repositório de código**

O código desse padrão está disponível no [escalonamento GitHub automático orientado por eventos usando o EKS Pod Identity e](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) o repositório KEDA.

## Práticas recomendadas
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Convém seguir estas práticas recomendadas:
+ [Amazon EKS best practices](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
+ [Melhores práticas do Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Épicos
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Crie AWS recursos
<a name="create-aws-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o perfil do IAM para o operador do KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrador da AWS | 
| Crie um perfil do IAM para a aplicação de exemplo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrador da AWS | 
| Como criar uma fila do Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS geral | 
| Crie um repositório do Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS geral | 

### Configuração do cluster do Amazon EKS
<a name="set-up-the-eks-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante o agente da Identidade de Pods do Amazon EKS. | Para o cluster de destino do Amazon EKS, configure o agente da Identidade de Pods do Amazon EKS. Siga as instruções em [Configurar o atendente da Identidade de Pods do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) na documentação do Amazon EKS. | AWS DevOps | 
| Implante o KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps engenheiro | 
| Atribua o perfil do IAM à conta de serviço do Kubernetes. | Siga as instruções em [Atribuir um perfil do IAM a uma conta de serviço do Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) na documentação do Amazon EKS. Use os seguintes valores:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Crie um namespace . | Insira o seguinte comando para criar um namespace `security` no cluster do Amazon EKS de destino:<pre>kubectl create ns security</pre> | DevOps engenheiro | 

### Implantar o aplicativo de exemplo
<a name="deploy-the-sample-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone os arquivos da aplicação. | Insira o comando a seguir para clonar o [escalonamento automático controlado por eventos usando o EKS Pod Identity e](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) o repositório KEDA em: GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps engenheiro | 
| Crie a imagem do Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps engenheiro | 
| Envie a imagem do Docker para o Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Você pode encontrar comandos push navegando até a página do repositório do Amazon ECR e, em seguida, escolhendo **Visualizar comandos push**. | DevOps engenheiro | 
| Implante a aplicação de exemplo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps engenheiro | 
| Atribua o perfil do IAM à conta de serviço da aplicação. | Siga uma destas etapas para associar o perfil `keda-identity` do IAM à conta de serviço da aplicação de exemplo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps engenheiro | 
| Implante `ScaledObject` e `TriggerAuthentication`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps engenheiro | 

### Testar o ajuste de escala automático
<a name="test-auto-scaling"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Envie mensagens para a fila do Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps engenheiro | 
| Monitore os pods de aplicação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps engenheiro | 

## Solução de problemas
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O operador do KEDA não pode escalar a aplicação. | Insira o seguinte comando para verificar os logs do perfil do IAM `keda-operator`:<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre> Se houver um código de resposta `HTTP 403`, a aplicação e o escalador do KEDA não terão permissões suficientes para acessar a fila do Amazon SQS. Execute as etapas a seguir:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Se houver um erro `Assume-Role`, um [perfil do IAM do nó do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) não poderá assumir o perfil do IAM definido para `TriggerAuthentication`. Execute as etapas a seguir:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Recursos relacionados
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Configurar o atendente da Identidade de Pods do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) na documentação do Amazon EKS.
+ [Deploying KEDA](https://keda.sh/docs/2.14/deploy/) (documentação do KEDA)
+ [ScaledObject especificação](https://keda.sh/docs/2.16/reference/scaledobject-spec/) (documentação KEDA)
+ [Autenticação com TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (documentação KEDA)

# Implantações simplificadas do PostgreSQL no Amazon EKS usando o PGO
<a name="streamline-postgresql-deployments-amazon-eks-pgo"></a>

*Shalaka Dengale, Amazon Web Services*

## Resumo
<a name="streamline-postgresql-deployments-amazon-eks-pgo-summary"></a>

Este padrão integra o Postgres Operator da Crunchy Data (PGO) com o Amazon Elastic Kubernetes Service (Amazon EKS) para simplificar as implantações do PostgreSQL em ambientes nativos da nuvem. O PGO fornece automação e escalabilidade para gerenciar bancos de dados PostgreSQL no Kubernetes. Quando você combina o PGO com o Amazon EKS, ele cria uma plataforma robusta para implantar, gerenciar e escalar bancos de dados PostgreSQL de forma eficiente.

Essa integração oferece os seguintes benefícios:
+ Implantação automatizada: simplifica a implantação e o gerenciamento de clusters do PostgreSQL.
+ Definições de recursos personalizadas (CRDs):**** usa primitivas do Kubernetes para gerenciamento do PostgreSQL.
+ Alta disponibilidade: oferece suporte a failover automático e replicação síncrona.
+ Backups e restaurações automatizados:**** simplifica os processos de backup e restauração.
+ Escalabilidade horizontal:**** permite o a escalabilidade dinâmica de clusters do PostgreSQL.
+ Atualizações de versão: facilita as atualizações contínuas com o mínimo de tempo de inatividade.
+ Segurança: aplica criptografia, controles de acesso e mecanismos de autenticação.

## Pré-requisitos e limitações
<a name="streamline-postgresql-deployments-amazon-eks-pgo-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ [AWS Command Line Interface (AWS CLI) versão 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), instalado e configurado no Linux, macOS ou Windows.
+ [AWS CLI Config](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html), para conectar AWS recursos a partir da linha de comando.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), instalado e configurado no Linux, macOS ou Windows.
+ `kubectl`, instalado e configurado para acessar recursos em seu cluster Amazon EKS. Para obter mais informações, consulte [Configurar o kubectl e o eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) na documentação do Amazon EKS. 
+ Seu terminal de computador configurado para acessar o cluster do Amazon EKS. Para obter mais informações, consulte [Configurar o computador para se comunicar com seu cluster](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) na documentação do Amazon EKS.

**Versões do produto**
+ Kubernetes versões 1.21 a 1.24 ou posteriores (consulte a [documentação do PGO](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/)).
+ PostgreSQL versão 10 ou posterior. Este padrão usa o PostgreSQL versão 16.

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

## Arquitetura
<a name="streamline-postgresql-deployments-amazon-eks-pgo-architecture"></a>

**Pilha de tecnologias de destino**
+ Amazon EKS
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Amazon Elastic Compute Cloud (Amazon EC2)

**Arquitetura de destino**

![\[Arquitetura para usar o PGO com três zonas de disponibilidade e duas réplicas PgBouncer, e o operador PGO.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/4c164012-7527-4ebe-b6a7-c129600328d6/images/26a5572b-405b-4634-b96a-91254c3ea2c1.png)


Este padrão cria uma arquitetura que contém um cluster do Amazon EKS com três nós. Cada nó é executado em um conjunto de instâncias do EC2 no backend. Essa configuração do PostgreSQL segue uma arquitetura de réplica primária, que é particularmente eficaz para casos de uso com muita leitura. A arquitetura inclui os seguintes componentes:
+ O **contêiner do banco de dados primário (pg-primary)** hospeda a instância principal do PostgreSQL para a qual todas as operações de gravação são direcionadas.
+ Os **contêineres de réplica secundários (pg-replica)** hospedam as instâncias do PostgreSQL que replicam os dados do banco de dados primário e processam as operações de leitura.
+ **PgBouncer**é um agrupador de conexões leve para bancos de dados PostgreSQL incluído no PGO. Ele fica entre o cliente e o servidor do PostgreSQL e atua como intermediário para conexões do banco de dados.
+ O **PGO** automatiza a implantação e o gerenciamento de clusters do PostgreSQL nesse ambiente Kubernetes.
+ O **Patroni** é uma ferramenta de código aberto que gerencia e automatiza configurações de alta disponibilidade para o PostgreSQL. Ele está incluído no PGO. Quando você usa o Patroni com o PGO no Kubernetes, ele desempenha um papel crucial para garantir a resiliência e a tolerância a falhas de um cluster do PostgreSQL. Para obter mais informações, consulte a [documentação do Patroni](https://patroni.readthedocs.io/en/latest/).

O fluxo de trabalho inclui estas etapas:
+ **Implantação do operador do PGO**. Implante o operador do PGO no cluster do Kubernetes que é executado no Amazon EKS. Isso pode ser feito usando manifestos do Kubernetes ou charts do Helm. Este padrão usa manifestos do Kubernetes.
+ **Defina instâncias do PostgreSQL**. Quando o operador está em execução, você cria recursos personalizados (CRs) para especificar o estado desejado das instâncias do PostgreSQL. Isso inclui configurações como armazenamento, replicação e definições de alta disponibilidade.
+ **Gerenciamento de operadores**. Você interage com o operador por meio de objetos da Kubernetes API, como CRs criar, atualizar ou excluir instâncias do PostgreSQL.
+ **Monitoramento e manutenção**. Você pode monitorar a integridade e a performance das instâncias do PostgreSQL executadas no Amazon EKS. Os operadores geralmente fornecem métricas e registros em log para fins de monitoramento. Você pode realizar tarefas de manutenção de rotina, como atualizações e correções, conforme necessário. Para obter mais informações, consulte [Monitorar a performance de clusters e visualizar logs](https://docs.aws.amazon.com/eks/latest/userguide/eks-observe.html) na documentação do Amazon EKS.
+ **Dimensionamento e backup**: você pode usar os recursos fornecidos pelo operador para escalar instâncias do PostgreSQL e gerenciar backups.

Este padrão não abrange as operações de monitoramento, manutenção e backup.

**Automação e escala**
+ Você pode usar CloudFormation para automatizar a criação da infraestrutura. Para obter mais informações, consulte [Criar recursos do Amazon EKS com o CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) na documentação do Amazon EKS.
+ Você pode usar os números GitVersion de compilação do Jenkins para automatizar a implantação de instâncias de banco de dados.

## Ferramentas
<a name="streamline-postgresql-deployments-amazon-eks-pgo-tools"></a>

**Serviços da AWS**
+ [O Amazon Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)) ajuda você a executar o AWS Kubernetes sem precisar instalar ou manter seu próprio plano de controle ou nós do Kubernetes.  
+ [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.

**Outras ferramentas**
+ O [eksctl](https://eksctl.io/) é uma ferramenta simples de linha de comando para criar clusters no Amazon EKS.
+ O [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/): é um utilitário de linha de comando para executar comandos em clusters do Kubernetes.
+ O [PGO](https://github.com/CrunchyData/postgres-operator) automatiza e dimensiona o gerenciamento de bancos de dados PostgreSQL no Kubernetes.

## Práticas recomendadas
<a name="streamline-postgresql-deployments-amazon-eks-pgo-best-practices"></a>

Siga estas práticas recomendadas para garantir uma implantação tranquila e eficiente:
+ **Proteja seu cluster do EKS**. Implemente as melhores práticas de segurança para seu cluster EKS, como usar funções AWS Identity and Access Management (IAM) para contas de serviço (IRSA), políticas de rede e grupos de segurança de VPC. Limite o acesso ao servidor da API do cluster do EKS e criptografe as comunicações entre os nós e o servidor da API usando TLS.
+ **Certifique-se da compatibilidade de versões** entre o PGO e o Kubernetes em execução no Amazon EKS. Alguns recursos do PGO podem exigir versões específicas do Kubernetes ou introduzir limitações de compatibilidade. Para obter mais informações, consulte [Components and Compatibility](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/references/components/) na documentação do PGO.
+ **Planeje a alocação de recursos** para sua implantação do PGO, incluindo CPU, memória e armazenamento. Considere os requisitos de recursos para o PGO, bem como para as instâncias do PostgreSQL gerenciadas por ele. Monitore o uso de recursos e dimensione os recursos conforme necessário.
+ **Favoreça a alta disponibilidade**. Projete sua implantação do PGO para alta disponibilidade a fim de minimizar o tempo de inatividade e garantir a confiabilidade. Implante várias réplicas do PGO em diferentes zonas de disponibilidade para tolerância a falhas.
+ **Implemente procedimentos de backup e restauração** para seus bancos de dados PostgreSQL gerenciados pelo PGO. Use recursos fornecidos pelo PGO ou por soluções de backup de terceiros que sejam compatíveis com o Kubernetes e o Amazon EKS.
+ **Configure o monitoramento e o registro em log** para sua implantação do PGO a fim de monitorar a performance, a integridade e os eventos. Use ferramentas como o Prometheus, para monitorar métricas, e o Grafana, para visualização. Configure o registro em log para capturar logs do PGO para solução de problemas e auditoria.
+ **Configure a rede** adequadamente para permitir a comunicação entre o PGO, as instâncias do PostgreSQL e outros serviços em seu cluster do Kubernetes. Use os recursos de rede da Amazon VPC e os plug-ins de rede do Kubernetes, como o Calico ou a [Amazon VPC CNI](https://github.com/aws/amazon-vpc-cni-k8s), para aplicar políticas de rede e isolar o tráfego.
+ **Escolha as opções de armazenamento apropriadas** para seus bancos de dados PostgreSQL, considerando fatores como performance, durabilidade e escalabilidade. Use volumes do Amazon Elastic Block Store (Amazon EBS) AWS ou serviços de armazenamento gerenciado para armazenamento persistente. Para obter mais informações, consulte [Usar armazenamento de volumes do Kubernetes com o Amazon EBS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) na documentação do Amazon EKS.
+ **Use ferramentas de infraestrutura como código (IaC)**, como CloudFormation para automatizar a implantação e a configuração do PGO no Amazon EKS. Defina os componentes da infraestrutura (incluindo o cluster do EKS, a rede e os recursos do PGO) como código para consistência, repetibilidade e controle de versão.

## Épicos
<a name="streamline-postgresql-deployments-amazon-eks-pgo-epics"></a>

### Criar um perfil do IAM
<a name="create-an-iam-role"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um perfil do IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador da AWS | 

### Criar um cluster do Amazon EKS.
<a name="create-an-eks-cluster"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um cluster do Amazon EKS. | Se você já implantou um cluster, ignore esta etapa. Caso contrário, implante um cluster Amazon EKS em seu cluster atual Conta da AWS usando `eksctl` Terraform ou CloudFormation. Este padrão usa o `eksctl` para a implantação de clusters.Este padrão usa o Amazon EC2 como um grupo de nós para o Amazon EKS. Se você quiser usar AWS Fargate, consulte a `managedNodeGroups` configuração na documentação do [eksctl](https://eksctl.io/usage/schema/#managedNodeGroups).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador da AWS, administrador do Terraform ou eksctl, administrador do Kubernetes | 
| Valide o status do cluster. | Execute o seguinte comando para exibir o status atual dos nós no cluster:<pre>kubectl get nodes</pre>Se encontrar erros, consulte a [seção de solução de problemas](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html) da documentação do Amazon EKS. | Administrador da AWS, administrador do Terraform ou eksctl, administrador do Kubernetes | 

### Criar um provedor de identidade OIDC
<a name="create-an-oidc-identity-provider"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Habilite o provedor OIDC do IAM. | Como pré-requisito para o driver da interface de armazenamento de contêiner (CSI) do Amazon EBS, você deve ter um provedor OpenID Connect (OIDC) do IAM existente para o cluster.Habilite o provedor OIDC do IAM usando o seguinte comando:<pre>eksctl utils associate-iam-oidc-provider --region={region} --cluster={YourClusterNameHere} --approve</pre>Para obter mais informações sobre essa etapa, consulte a [documentação do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). | Administrador da AWS | 
| Crie um perfil do IAM para o driver da CSI do Amazon EBS. | Use o seguinte comando do `eksctl` para criar o perfil do IAM para o driver do CSI:<pre>eksctl create iamserviceaccount \<br />  --region {RegionName} \<br />  --name ebs-csi-controller-sa \<br />  --namespace kube-system \<br />  --cluster {YourClusterNameHere} \<br />  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \<br />  --approve \<br />  --role-only \<br />  --role-name AmazonEKS_EBS_CSI_DriverRole</pre>Se você usa unidades criptografadas do Amazon EBS, é necessário configurar ainda mais a política. Para obter instruções, consulte a [documentação do driver da CSI do Amazon EBS](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#installation-1). | Administrador da AWS | 
| Adicione o driver da CSI do Amazon EBS. | Use o seguinte comando do `eksctl` para adicionar o driver da CSI do Amazon EBS:<pre>eksctl create addon \<br />  --name aws-ebs-csi-driver \<br />  --cluster <YourClusterName> service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity \<br />  --query Account \<br />  --output text):role/AmazonEKS_EBS_CSI_DriverRole \<br />  --force</pre> | Administrador da AWS | 

### Instalar o PGO
<a name="install-pgo"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório do PGO. | Clone o GitHub repositório para PGO:<pre>git clone https://github.com/CrunchyData/postgres-operator-examples.git </pre> | AWS DevOps | 
| Forneça os detalhes do perfil para a criação da conta de serviço. | Para conceder ao cluster do Amazon EKS acesso aos AWS recursos necessários, especifique o Amazon Resource Name (ARN) da função do OIDC que você criou anteriormente no `service_account.yaml` arquivo que está localizado. [GitHub](https://github.com/CrunchyData/postgres-operator/blob/main/config/rbac/cluster/service_account.yaml)<pre>cd postgres-operator-examples</pre><pre>---<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::<accountId>:role/<role_name> # Update the OIDC role ARN created earlier</pre> | Administrador da AWS, administrador do Kubernetes | 
| Crie o namespace e os pré-requisitos do PGO. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador do Kubernetes | 
| Verifique a criação dos pods. | Verifique se o namespace e a configuração padrão foram criados:<pre>kubectl get pods -n postgres-operator</pre> | Administrador da AWS, administrador do Kubernetes | 
| Verificar PVCs. | Use o comando a seguir para verificar as declarações de volume persistentes (PVCs):<pre>kubectl describe pvc -n postgres-operator</pre> | Administrador da AWS, administrador do Kubernetes | 

### Criar e implantar um operador
<a name="create-and-deploy-an-operator"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um operador. | Confirme se o conteúdo do arquivo localizado em `/kustomize/postgres/postgres.yaml` corresponde ao seguinte:<pre>spec:<br />  instances:<br />    - name: pg-1<br />      replicas: 3<br />  patroni:<br />    dynamicConfiguration:<br />      postgresql:<br />      pg_hba:<br />        - "host all all 0.0.0.0/0 trust" # this line enabled logical replication with programmatic access<br />        - "host all postgres 127.0.0.1/32 md5"<br />      synchronous_mode: true<br />  users:<br />  - name: replicator<br />    databases:<br />      - testdb<br />    options: "REPLICATION"</pre>Essas atualizações garantem o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrador da AWS, DBA, administrador do Kubernetes | 
| Implante o operador. | Implante o operador do PGO para simplificar o gerenciamento e a operação dos bancos de dados PostgreSQL em ambientes Kubernetes:<pre>kubectl apply -k kustomize/postgres</pre> | Administrador da AWS, DBA, administrador do Kubernetes | 
| Verificar a implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html)Na saída do comando, observe a réplica primária (`primary_pod_name`) e a réplica de leitura (`read_pod_name`). Elas serão usadas nas próximas etapas. | Administrador da AWS, DBA, administrador do Kubernetes | 

### Verificar a replicação de streaming
<a name="verify-streaming-replication"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Grave os dados na réplica primária. | Use os seguintes comandos para se conectar à réplica primária do PostgreSQL e gravar dados no banco de dados:<pre>kubectl exec -it <primary_pod_name> bash -n postgres-operator</pre><pre>psql</pre><pre>CREATE TABLE customers (firstname text, customer_id serial, date_created timestamp);<br />\dt</pre> | Administrador da AWS, administrador do Kubernetes | 
| Confirme se a réplica de leitura tem os mesmos dados. | Conecte-se à réplica de leitura do PostgreSQL e verifique se a replicação de streaming está funcionando corretamente:<pre>kubectl exec -it {read_pod_name} bash -n postgres-operator</pre><pre>psql</pre><pre>\dt</pre>A réplica de leitura deve ter a tabela que você criou na réplica primária na etapa anterior. | Administrador da AWS, administrador do Kubernetes | 

## Solução de problemas
<a name="streamline-postgresql-deployments-amazon-eks-pgo-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O pod não inicia. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| As réplicas estão significativamente atrasadas em relação ao banco de dados primário. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Você não tem visibilidade da performance e da integridade do cluster do PostgreSQL. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| A replicação não funciona. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 

## Recursos relacionados
<a name="streamline-postgresql-deployments-amazon-eks-pgo-resources"></a>
+ [Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html) (whitepaper *Overview of Deployment Options on AWS*)
+  [CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/aws-cloudformation.html) (whitepaper *Overview of Deployment Options on AWS*)
+ [Conceitos básicos do Amazon EKS: eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) (*Guia do usuário do Amazon EKS*)
+ [Configurar o kubectl e o eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) (*Guia do usuário do Amazon EKS*)
+ [Criar um perfil para uma federação do OpenID Connect](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) (*Guia do usuário do IAM*)
+ [Definindo as configurações do AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) (*Guia AWS CLI do usuário*)
+ [Documentação do Crunchy Postgres for Kubernetes](https://access.crunchydata.com/documentation/postgres-operator/latest)
+ [Crunch & Learn: Crunchy Postgres for Kubernetes 5.0](https://www.youtube-nocookie.com/embed/IIf9WZO3K50) (vídeo)

# Autenticação simplificada de aplicações com TLS mútua no Amazon ECS usando o Application Load Balancer
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs"></a>

*Olawale Olaleye e Shamanth Devagari, Amazon Web Services*

## Resumo
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-summary"></a>

Este padrão ajuda você a simplificar a autenticação das suas aplicações e aliviar as atividades de segurança com TLS mútua no Amazon Elastic Container Service (Amazon ECS) usando o [Application Load Balancer (ALB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/mutual-authentication.html). Com o ALB, você pode autenticar certificados de cliente X.509 do. Autoridade de Certificação Privada da AWS Essa combinação poderosa ajuda a obter uma comunicação segura entre seus serviços, reduzindo a necessidade de mecanismos complexos de autenticação em suas aplicações. Além disso, o padrão usa o Amazon Elastic Container Registry (Amazon ECR) para armazenar imagens de contêiner.

O exemplo deste padrão usa imagens do Docker de uma galeria pública para criar inicialmente as workloads de amostra. Posteriormente, novas imagens do Docker são criadas para serem armazenadas no Amazon ECR. Para a fonte, considere um sistema baseado em Git GitHub, como, ou Bitbucket GitLab, ou use o Amazon Simple Storage Service Amazon S3 (Amazon S3). Para criar as imagens do Docker, considere usar AWS CodeBuild para as imagens subsequentes.

## Pré-requisitos e limitações
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS com acesso para implantar AWS CloudFormation pilhas. Verifique se você tem [permissões de usuário ou função AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html) (IAM) para implantar CloudFormation.
+ AWS Command Line Interface (AWS CLI) [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). [Configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) suas AWS credenciais em sua máquina local ou em seu ambiente usando AWS CLI ou definindo as variáveis de ambiente no `~/.aws/credentials` arquivo.
+ OpenSSL [instalado](https://www.openssl.org/).
+ Docker [instalado](https://www.docker.com/get-started/).
+ Familiaridade com o Serviços da AWS descrito em [Ferramentas](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools).
+ Conhecimento em Docker e NGINX.

**Limitações**
+ A TLS mútua para o Application Load Balancer é compatível somente com certificados de cliente X.509v3. Não há suporte para certificados de cliente X.509v1.
+ O CloudFormation modelo fornecido no repositório de código desse padrão não inclui o provisionamento de um CodeBuild projeto como parte da pilha.
+ 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**
+ Docker, versão 27.3.1 ou versões posteriores
+ AWS CLI versão 2.14.5 ou posterior

## Arquitetura
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-architecture"></a>

O diagrama a seguir mostra os componentes da arquitetura desse padrão.

![\[Fluxo de trabalho para autenticar com TLS mútua usando o Application Load Balancer.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a343fa4e-097f-416b-9c83-01a28eb57dc3/images/e1371297-b987-4487-9b13-8120933c921f.png)


 O diagrama mostra o seguinte fluxo de trabalho:

1. Crie um repositório Git e confirme o código da aplicação nele.

1. Crie uma autoridade de certificação (CA) privada em CA Privada da AWS.

1. Crie um CodeBuild projeto. O CodeBuildproject é acionado por alterações de confirmação e cria a imagem do Docker e publica a imagem criada no Amazon ECR.

1. Copie a cadeia de certificados e o corpo do certificado da CA e faça o upload do pacote de certificados no Amazon S3.

1. Crie um armazenamento confiável com o pacote da CA que você enviou para o Amazon S3. Associe o armazenamento confiável aos receptor da TLS mútua no Application Load Balancer (ALB).

1. Use a CA privada para emitir certificados de cliente para as workloads do contêiner. Crie também um certificado TLS privado usando o. CA Privada da AWS

1. Importe o certificado TLS privado para AWS Certificate Manager (ACM) e use-o com o ALB.

1. A workload do contêiner em `ServiceTwo` usa o certificado de cliente emitido para autenticar com o ALB ao se comunicar com a workload do contêiner em `ServiceOne`.

1. A workload do contêiner em `ServiceOne` usa o certificado de cliente emitido para autenticar com o ALB ao se comunicar com a workload do contêiner em `ServiceTwo`.

**Automação e escala**

Esse padrão pode ser totalmente automatizado usando CloudFormation AWS Cloud Development Kit (AWS CDK) , ou operações de API de um SDK para provisionar os AWS recursos.

Você pode usar AWS CodePipeline para implementar um pipeline de integração contínua e implantação contínua (CI/CD) usando CodeBuild para automatizar o processo de criação de imagens de contêineres e implantar novas versões nos serviços de cluster do Amazon ECS.

## Ferramentas
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools"></a>

**Serviços da AWS **
+ [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 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 CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) é um serviço de compilação totalmente gerenciado que permite compilar o código-fonte, realizar testes de unidade e produzir artefatos preparados para a implantação.
+ O [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.
+ O [Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) é um serviço de gerenciamento de contêineres altamente escalável e rápido para execução, interrupção e gerenciamento de contêineres em um cluster. Você pode executar suas tarefas e serviços em uma infraestrutura sem servidor gerenciada pela. AWS Fargate Como alternativa, para ter mais controle sobre sua infraestrutura, você pode executar suas tarefas e serviços em um cluster de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) que você gerencia.
+ Com o [Amazon ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html), você pode interagir diretamente com contêineres sem precisar interagir primeiro com o sistema operacional do contêiner do host, abrir portas de entrada ou gerenciar chaves SSH. Você pode usar o ECS Exec para executar comandos ou obter um shell para um contêiner em execução em uma EC2 instância da Amazon ou em. AWS Fargate
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, você pode distribuir o tráfego entre EC2 instâncias, contêineres e endereços IP da Amazon em uma ou mais zonas de disponibilidade. O ELB monitora a integridade dos destinos registrados e roteia o tráfego apenas para os destinos íntegros. O ELB escala seu balanceador de carga conforme o tráfego de entrada muda com o tempo. Ele pode ser dimensionado automaticamente para a maioria das workloads.
+ [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 EC2 instâncias da Amazon. O Fargate é compatível com o Amazon ECS e com o Amazon Elastic Kubernetes Service (Amazon EKS). Você pode executar suas tarefas e serviços do Amazon ECS com o tipo de inicialização do Fargate ou com um provedor de capacidade do Fargate. Para isso, empacote sua aplicação em contêineres, especifique os requisitos de CPU e de memória, defina as políticas do IAM e de rede e inicie a aplicação. Cada tarefa do Fargate tem seu próprio limite de isolamento e não compartilha o kernel subjacente, os recursos de CPU, os recursos de memória nem a interface de rede elástica com outra tarefa.
+ [Autoridade de Certificação Privada da AWS](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)permite a criação de hierarquias de autoridade de certificação (CA) privada, incluindo raiz e subordinada CAs, sem os custos de investimento e manutenção da operação de uma CA local.

**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.
+ [GitHub](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), e o [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) são alguns dos sistemas de controle de código-fonte baseados em Git comumente usados para acompanhar as alterações no código-fonte.
+ O [NGINX Open Source](https://nginx.org/en/docs/?_ga=2.187509224.1322712425.1699399865-405102969.1699399865) é um balanceador de carga, cache de conteúdo e servidor web de código aberto. Este padrão o usa como um servidor web.
+ O [OpenSSL](https://www.openssl.org/) é uma biblioteca de código aberto que fornece serviços usados pelas implementações do OpenSSL de TLS e CMS. 

**Repositório de código**

O código desse padrão está disponível no repositório GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS).

## Práticas recomendadas
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-best-practices"></a>
+ Use o Amazon ECS Exec para executar comandos ou obter um shell para um contêiner em execução no Fargate. Também é possível usar o ECS Exec para ajudar a coletar informações de diagnóstico para depuração.
+ Use grupos de segurança e listas de controle de acesso à rede (ACLs) para controlar o tráfego de entrada e saída entre os serviços. As tarefas do Fargate recebem um endereço IP da sub-rede configurada em sua nuvem privada virtual (VPC).

## Épicos
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-epics"></a>

### Criar o repositório
<a name="create-the-repository"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Faça o download do código-fonte. | Para baixar o código-fonte desse padrão, bifurque ou clone o repositório GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS). | DevOps engenheiro | 
| Crie um repositório Git. | Para criar um repositório Git para conter o Dockerfile e os arquivos `buildspec.yaml`, siga as etapas abaixo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git` | DevOps engenheiro | 

### Criar uma CA e gerar certificados
<a name="create-ca-and-generate-certificates"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma CA privada em CA Privada da AWS. | Para criar uma autoridade de certificação (CA) privada, execute os comandos a seguir no seu terminal. Substitua os valores no exemplo por seus próprios valores. <pre>export AWS_DEFAULT_REGION="us-west-2"<br />export SERVICES_DOMAIN="www.example.com"<br /><br />export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \<br />    --certificate-authority-type ROOT \<br />    --certificate-authority-configuration \<br />    "KeyAlgorithm=RSA_2048,<br />    SigningAlgorithm=SHA256WITHRSA,<br />    Subject={<br />        Country=US,<br />        State=WA,<br />        Locality=Seattle,<br />        Organization=Build on AWS,<br />        OrganizationalUnit=mTLS Amazon ECS and ALB Example,<br />        CommonName=${SERVICES_DOMAIN}}" \<br />        --query CertificateAuthorityArn --output text`</pre>Para obter mais detalhes, consulte [Criar uma CA privada CA Privada da AWS na](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html) AWS documentação. | DevOps engenheiro, AWS DevOps | 
| Crie e instale seu certificado CA privado. | Para criar e instalar um certificado para sua CA raiz privada, execute os comandos os seguintes no seu terminal:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | AWS DevOps, DevOps engenheiro | 
| Solicite um certificado gerenciado. | Para solicitar um certificado privado AWS Certificate Manager para uso com seu ALB privado, use o seguinte comando:<pre>export TLS_CERTIFICATE_ARN=`aws acm request-certificate \<br />    --domain-name "*.${DOMAIN_DOMAIN}" \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --query CertificateArn --output text`</pre> | DevOps engenheiro, AWS DevOps | 
| Use a CA privada para emitir um certificado de cliente. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem``openssl req -out client_csr2.pem -new -newkey rsa:2048 -nodes -keyout client_private-key2.pem`Esse comando retorna a CSR e a chave privada dos dois serviços. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)<pre>SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr1.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_ONE_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert1.cert<br /><br />SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr2.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_TWO_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert2.cert</pre>Para obter mais informações, consulte [Emitir certificados de entidades finais privadas](https://docs.aws.amazon.com/privateca/latest/userguide/PcaIssueCert.html) na AWS documentação. | DevOps engenheiro, AWS DevOps | 

### Provisione serviços da AWS
<a name="provision-aws-services"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Provisão Serviços da AWS com o CloudFormation modelo. | Para provisionar a nuvem privada virtual (VPC), o cluster Amazon ECS, os serviços do Amazon ECS, o Application Load Balancer e o Amazon Elastic Container Registry (Amazon ECR), use o modelo. CloudFormation  | DevOps engenheiro | 
| Obtenha as variáveis. | Verifique se você tem um cluster do Amazon ECS com dois serviços em execução. Para recuperar os detalhes do recurso e armazená-los como variáveis, use os seguintes comandos:<pre><br />export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue')<br /><br />export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue')<br /><br />export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue')<br /><br />export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue')<br /><br />export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue')<br /><br />export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue')<br /><br />export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue')<br /><br />export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')</pre> | DevOps engenheiro | 
| Crie um CodeBuild projeto. | Para usar um CodeBuild projeto para criar as imagens do Docker para seus serviços do Amazon ECS, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Para obter mais detalhes, consulte [Criar um projeto de compilação AWS CodeBuild na](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html) AWS documentação. | AWS DevOps, DevOps engenheiro | 
| Crie as imagens do Docker. | Você pode usar CodeBuild para realizar o processo de criação da imagem. CodeBuild precisa de permissões para interagir com o Amazon ECR e trabalhar com o Amazon S3.Como parte do processo, a imagem do Docker é criada e enviada para o registro do Amazon ECR. Para obter detalhes sobre o modelo e o código, consulte [Informações adicionais](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional).(Opcional) Para criar as imagens localmente para fins de teste, use o seguinte comando:<pre># login to ECR<br />aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri<br /><br /># build image for service one<br />cd /service1<br />aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive<br />docker build -t $ECRRepositoryServiceOneUri .<br />docker push $ECRRepositoryServiceOneUri<br /><br /># build image for service two<br />cd ../service2<br />aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive<br />docker build -t $ECRRepositoryServiceTwoUri .<br />docker push $ECRRepositoryServiceTwoUri</pre> | DevOps engenheiro | 

### Habilitar a TLS mútua
<a name="enable-mutual-tls"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Faça o upload do certificado CA para o Amazon S3. | Para fazer o upload do certificado CA para o bucket do Amazon S3, use o seguinte exemplo de comando:`aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/ ` | AWS DevOps, DevOps engenheiro | 
| Crie o armazenamento confiável. | Para criar o armazenamento confiável, use o seguinte exemplo de comando:<pre>TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \<br />    --ca-certificates-bundle-s3-bucket $BucketName \<br />    --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`</pre> | AWS DevOps, DevOps engenheiro | 
| Faça o upload dos certificados de cliente. | Para fazer upload dos certificados de cliente ao Amazon S3 para imagens do Docker, use o seguinte exemplo de comando:<pre># for service one<br />aws s3 cp client_cert1.cert s3://$BucketName/serviceone/<br />aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/<br /><br /># for service two<br />aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/<br />aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/</pre> | AWS DevOps, DevOps engenheiro | 
| Modifique o receptor. | Para habilitar a TLS mútua no ALB, modifique os receptores HTTPS usando os seguintes comandos:<pre>aws elbv2 modify-listener \<br />    --listener-arn $Service1ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8080 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /><br />aws elbv2 modify-listener \<br />    --listener-arn $Service2ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8090 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /></pre>Para obter mais informações, consulte [Como configurar o TLS mútuo em um Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/configuring-mtls-with-elb.html) Balancer na documentação. AWS  | AWS DevOps, DevOps engenheiro | 

### Atualizar os serviços
<a name="update-the-services"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize a definição de tarefa do Amazon ECS. | Para atualizar a definição da tarefa do Amazon ECS, modifique o parâmetro `image` na nova revisão.Para obter os valores dos respectivos serviços, atualize as definições de tarefas com o novo Uri de imagens do Docker que você criou nas etapas anteriores: `echo $ECRRepositoryServiceOneUri` ou `echo $ECRRepositoryServiceTwoUri`<pre><br />    "containerDefinitions": [<br />        {<br />            "name": "nginx",<br />            "image": "public.ecr.aws/nginx/nginx:latest",   # <----- change to new Uri<br />            "cpu": 0,</pre>Para obter mais informações, consulte [Atualização de uma definição de tarefa do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition-console-v2.html) usando o console na AWS documentação.  | AWS DevOps, DevOps engenheiro | 
| Atualize o serviço do Amazon ECS. | Atualize o serviço com a definição de tarefa mais recente. Essa definição de tarefa é o esquema para as imagens do Docker criadas recentemente e contém o certificado de cliente necessário para a autenticação de TLS mútua.  Para atualizar o serviço, use o seguinte procedimento:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Repita as etapas para o outro serviço. | Administrador da AWS, AWS DevOps, DevOps engenheiro | 

### Acessar a aplicação
<a name="access-the-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Copie o URL do aplicativo. | Use o console do Amazon ECS para visualizar a tarefa. Quando o status da tarefa for atualizado para **Em execução**, selecione a tarefa. Na seção **Tarefa**, copie o ID da tarefa. | Administrador da AWS, AWS DevOps | 
| Testar seu aplicativo | Para testar sua aplicação, use o ECS Exec para acessar as tarefas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | Administrador da AWS, AWS DevOps | 

## Recursos relacionados
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-resources"></a>

**Documentação do Amazon ECS**
+ [Criação de uma definição de tarefa do Amazon ECS usando o console](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)
+ [Criação de uma imagem de contêiner para uso no Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Clusters do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Amazon ECS para AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html#create-container-image-next-steps)
+ [Melhores práticas de rede do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-best-practices.html)
+ [Parâmetros de definição de serviço do Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html)

**Outros AWS recursos**
+ [Como uso a CA AWS privada para configurar o mTLS no Application Load Balancer?](https://repost.aws/knowledge-center/elb-alb-configure-private-ca-mtls) (AWS re:Post)

## Mais informações
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional"></a>

**Edição do Dockerfile**** **

O código a seguir mostra os comandos que você edita no Dockerfile do serviço 1:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 1: Ok" > /usr/share/nginx/html/index.html
ADD client_cert1.cert client_private-key1.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

O código a seguir mostra os comandos que você edita no Dockerfile do serviço 2:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 2: Ok" > /usr/share/nginx/html/index.html
ADD client_cert2.cert client_private-key2.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Se você estiver criando as imagens do Docker com CodeBuild, o `buildspec` arquivo usa o número da CodeBuild compilação para identificar de forma exclusiva as versões da imagem como um valor de tag. Você pode alterar o arquivo `buildspec` para atender às suas necessidades, conforme mostrado no seguinte código `buildspec ` personalizado: 

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPOSITORY_URI
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
        # change the S3 path depending on the service
      - aws s3 cp s3://$YOUR_S3_BUCKET_NAME/serviceone/ $CodeBuild_SRC_DIR/ --recursive 
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $ECR_REPOSITORY_URI:latest .
      - docker tag $ECR_REPOSITORY_URI:latest $ECR_REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $ECR_REPOSITORY_URI:latest
      - docker push $ECR_REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      # for ECS deployment reference
      - printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $ECR_REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json   

artifacts:
  files:
    - imagedefinitions.json
```

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

**Topics**
+ [Automatize a exclusão de AWS CloudFormation pilhas e recursos associados](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Automatize o gerenciamento dinâmico de pipelines para implantar soluções de hotfix em ambientes Gitflow usando e AWS Service Catalog AWS CodePipeline](automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.md)
+ [Crie CI/CD pipelines e clusters do Amazon ECS automaticamente para microsserviços usando o AWS CDK](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [Crie e envie imagens do Docker para o Amazon ECR usando GitHub Actions e Terraform](build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.md)
+ [Containerize workloads de mainframe que foram modernizadas pela Blu Age](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.md)
+ [Crie um analisador de log personalizado para o Amazon ECS usando um roteador de log Firelens](create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.md)
+ [Implantação de sistemas agênticos no Amazon Bedrock com a estrutura do CrewAI usando o Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Implante um ambiente para aplicativos Blu Age conteinerizados usando o Terraform](deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.md)
+ [Implante a lógica de pré-processamento em um modelo de ML em um único endpoint usando um pipeline de inferência na Amazon SageMaker](deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.md)
+ [Implante cargas de trabalho dos DevOps pipelines do Azure em clusters privados do Amazon EKS](deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.md)
+ [Implementação de diagnósticos e solução de problemas com base em IA no Kubernetes usando a integração do K8sGPT e do Amazon Bedrock](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [Gerencie blue/green implantações de microsserviços em várias contas e regiões usando os serviços de código da AWS e as chaves multirregionais do AWS KMS](manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.md)
+ [Gerencie aplicativos de contêineres on-premises configurando o Amazon ECS Anywhere com o AWS CDK](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [Migre do Oracle WebLogic para o Apache Tomcat (TomEE) no Amazon ECS](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [Modernize aplicativos ASP.NET Web Forms na AWS](modernize-asp-net-web-forms-applications-on-aws.md)
+ [Monitore os repositórios do Amazon ECR para obter permissões curinga usando o AWS e o AWS Config CloudFormation](monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.md)
+ [Monitore a atividade do aplicativo usando o CloudWatch Logs Insights](monitor-application-activity-by-using-cloudwatch-logs-insights.md)
+ [Configure um CI/CD pipeline para cargas de trabalho híbridas no Amazon ECS Anywhere usando o AWS CDK e GitLab](set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.md)
+ [Configure a end-to-end criptografia para aplicativos no Amazon EKS usando cert-manager e Let's Encrypt](set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.md)
+ [Simplificação da implantação de aplicações multilocatário no Amazon EKS usando o Flux](simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.md)
+ [Simplifique os fluxos de trabalho de aprendizado de máquina, do desenvolvimento local aos experimentos escaláveis, usando SageMaker IA e Hydra](streamline-machine-learning-workflows-by-using-amazon-sagemaker.md)
+ [Estruture um projeto Python em arquitetura hexagonal usando o AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Teste a AWS infraestrutura usando LocalStack e Terraform Tests](test-aws-infra-localstack-terraform.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)

# 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 Cadeia de Suprimentos AWS de data lakes em uma configuração de vários repositórios](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)
+ [Automatize a configuração do peering entre regiões com AWS Transit Gateway](automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.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)
+ [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)

# Redes
<a name="networking-pattern-list"></a>

**Topics**
+ [Automatize a configuração do peering entre regiões com AWS Transit Gateway](automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.md)
+ [Centralize a conectividade de rede usando o AWS Transit Gateway](centralize-network-connectivity-using-aws-transit-gateway.md)
+ [Configure a criptografia HTTPS para o Oracle JD Edwards EnterpriseOne no Oracle WebLogic usando um Application Load Balancer](configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.md)
+ [Conecte-se ao ambiente de gerenciamento e dados do Application Migration Service em uma rede privada](connect-to-application-migration-service-data-and-control-planes-over-a-private-network.md)
+ [Crie objetos Infoblox usando recursos CloudFormation personalizados da AWS e Amazon SNS](create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.md)
+ [Crie uma arquitetura IPAM hierárquica e multirregional usando o Terraform AWS](multi-region-ipam-architecture.md)
+ [Personalize os CloudWatch alertas da Amazon para AWS Network Firewall](customize-amazon-cloudwatch-alerts-for-aws-network-firewall.md)
+ [Implante recursos em uma AWS Wavelength zona usando o Terraform](deploy-resources-wavelength-zone-using-terraform.md)
+ [Migre registros de DNS em massa para uma zona hospedada privada do Amazon Route 53](migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.md)
+ [Modifique os cabeçalhos HTTP ao migrar de F5 para um Application Load Balancer na AWS](modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.md)
+ [Crie um relatório das descobertas do Network Access Analyzer para acesso de entrada à Internet em vários Contas da AWS](create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.md)
+ [Configure a resolução de DNS para redes híbridas em um ambiente com várias contas AWS](set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.md)
+ [Verifique se os balanceadores de carga ELB exigem terminação TLS](verify-that-elb-load-balancers-require-tls-termination.md)
+ [Visualização de logs e métricas do AWS Network Firewall usando o Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)
+ [Mais padrões](networking-more-patterns-pattern-list.md)

# Automatize a configuração do peering entre regiões com AWS Transit Gateway
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumo
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-summary"></a>

[AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)conecta nuvens privadas virtuais (VPCs) e redes locais por meio de um hub central. O tráfego do Transit Gateway não atravessa a Internet pública, o que reduz os vetores de ameaças, como explorações comuns e ataques distribuídos de negação de serviço (DDoS).

Se precisar se comunicar entre dois ou mais Regiões da AWS, você pode usar o emparelhamento entre regiões do Transit Gateway para estabelecer conexões de emparelhamento entre gateways de trânsito em diferentes regiões. No entanto, configurar manualmente o emparelhamento entre regiões com o Transit Gateway pode ser complexo e demorado. Esse padrão fornece orientação para o uso da infraestrutura como código (IaC) para configurar o peering. Você pode usar essa abordagem se precisar configurar várias regiões repetidamente e Contas da AWS para uma configuração de organização multirregional.

[Esse padrão configura uma [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)pilha que inclui um AWS Step Functions[fluxo de trabalho](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html), AWS Lambda[funções, funções](https://docs.aws.amazon.com/lambda/latest/dg/concepts-basics.html#gettingstarted-concepts-function)AWS Identity and Access Management (IAM) e [grupos](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) de registros no Amazon CloudWatch Logs.](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) Em seguida, você executa o fluxo de trabalho Step Functions para criar a conexão de emparelhamento entre regiões para seus gateways de trânsito.

## Pré-requisitos e limitações
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ [Um IDE com capacidade de geração de código, como o Kiro.](https://kiro.dev/#what-is-kiro)
+ Um bucket do Amazon Simple Storage Service (Amazon S3) e permissões para carregar objetos nele.
+ Gateways de trânsito criados nas regiões solicitantes e aceitantes.
+ VPCs criado nas regiões solicitantes e aceitantes. Marque o VPCs com uma `addToTransitGateway` chave com um valor de`true`.
+ [Grupos de segurança](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html) configurados para você de VPCs acordo com seus requisitos.
+ [Listas de controle de acesso à rede (ACLs)](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) configuradas para você de VPCs acordo com seus requisitos.

**Limitações**
+ Apenas alguns Regiões da AWS oferecem suporte ao peering entre regiões. Para obter uma lista completa das regiões que oferecem suporte ao peering entre regiões, consulte o. [AWS Transit Gateway FAQs](https://aws.amazon.com/transit-gateway/faqs/)

## Arquitetura
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-architecture"></a>

 A abordagem de desenvolvimento de IA agêntica descrita nesse padrão envolve as seguintes etapas:

1. **Defina a solicitação de automação** — Kiro recebe uma solicitação em linguagem natural que detalha os requisitos de emparelhamento.

1. **Gere script de automação** — Kiro gera os scripts CloudFormation e Lambda com base no prompt fornecido.

1. **Implante a pilha** — Kiro usa CloudFormation para implantar os recursos necessários.

1. **Configurar o peering** — o Kiro executa o fluxo de trabalho Step Functions, que chama as funções Lambda para criar conexões de peering e modificar tabelas de rotas.

O diagrama a seguir mostra o fluxo de trabalho do Step Functions:

![\[Fluxo de trabalho do Step Functions para chamar uma função do Lambda e modificar as tabelas de rotas para o emparelhamento do gateway de trânsito.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/images/2f235f47-5d68-492c-b954-7dc170939cae.png)


 

O fluxo de trabalho contém as seguintes etapas:

1. O fluxo de trabalho do Step Functions chama a função Lambda para o peering do Transit Gateway. 

1. O fluxo de trabalho espera por um minuto.

1. O fluxo de trabalho recupera o status de emparelhamento e o envia para o bloco de condições. O bloco é responsável pelo loop. 

1. Se a condição de sucesso não for atendida, o fluxo de trabalho será codificado para entrar no estágio do cronômetro. 

1. Se a condição de sucesso for atendida, uma função Lambda modifica as tabelas de rotas. 

1. O fluxo de trabalho do Step Functions termina.

## Ferramentas
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-tools"></a>
+ [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 CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ajuda você a centralizar os registros de todos os seus sistemas e aplicativos, Serviços da AWS para que você possa monitorá-los e arquivá-los com segurança.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[(](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)[)](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 [Kiro](https://kiro.dev/#what-is-kiro) é uma ferramenta de desenvolvimento de IA agente que ajuda você a criar aplicativos prontos para produção por meio do desenvolvimento orientado por especificações. 
+ 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 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.  

## Épicos
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-epics"></a>

### Gere código Lambda e Step Functions
<a name="generate-lam-and-sfn-code"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Preenchendo espaços reservados imediatos com detalhes específicos | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html)Como alternativa, você pode adicionar isso como um prompt embutido que faz referência às variáveis acima sem anexar o arquivo para contextualizar. | AWS geral, administrador de rede | 
| Crie uma função Lambda que crie os anexos de emparelhamento. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS geral, administrador de rede, engenharia rápida | 
| Crie uma função Lambda que pesquise o status do anexo emparelhado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS geral, administrador de rede, engenharia rápida | 
| Crie uma função Lambda que adicione rotas estáticas às duas regiões. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS geral, administrador de rede | 
| Crie o CloudFormation modelo. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS DevOps, AWS geral, engenharia rápida | 

### Implante os AWS recursos
<a name="deploy-the-aws-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante a CloudFormation pilha usando prompts. | Insira o seguinte prompt:<pre>Using the outputs from Prompts 1-4, package and deploy the full stack. Steps:<br /><br />1. For each of the three Python files from Prompts 1-3, create a zip named after the file (e.g. peer-transit-gateway.zip that contains peer-transit-gateway.py).<br />2. Upload all three zips to S3_BUCKET.<br />3. Deploy the CloudFormation template from Prompt 4 to ACTIVE_REGION with S3BucketName=S3_BUCKET and CAPABILITY_NAMED_IAM.<br />4. Initiate the Step Function from the deployed stack.<br /><br />Zip file names must match the S3Key values in the template exactly.</pre> | AWS DevOps, administrador de nuvem, AWS geral, engenharia rápida | 
| Valide a implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.html) | AWS geral | 

## Recursos relacionados
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-resources"></a>
+ [Iniciando execuções de máquinas de estado em Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-state-machine-executions.html)
+ [Anexos de emparelhamento do Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html)
+ [Interconexão VPCs entre Regiões da AWS uso AWS Transit Gateway](https://www.youtube.com/watch?v=cj1rQqLxXU8) (vídeo)

# Centralize a conectividade de rede usando o AWS Transit Gateway
<a name="centralize-network-connectivity-using-aws-transit-gateway"></a>

*Mydhili Palagummi e Nikhil Marrapu, Amazon Web Services*

## Resumo
<a name="centralize-network-connectivity-using-aws-transit-gateway-summary"></a>

Esse padrão descreve a configuração mais simples na qual o AWS Transit Gateway pode ser usado para conectar uma rede local a nuvens privadas virtuais (VPCs) em várias contas da AWS em uma região da AWS. Usando essa configuração, você pode estabelecer uma rede híbrida que conecta várias redes VPC em uma região e uma rede on-premises. Para tanto, use um gateway de trânsito e uma conexão de rede privada virtual (VPN) com a rede on-premises. 

## Pré-requisitos e limitações
<a name="centralize-network-connectivity-using-aws-transit-gateway-prereqs"></a>

**Pré-requisitos **
+ Uma conta para hospedagem de serviços de rede, gerenciada como uma conta membro de uma organização em AWS Organizations
+ VPCs em várias contas da AWS, sem sobreposição de blocos de roteamento entre domínios sem classe (CIDR)

**Limitações**

Esse padrão não suporta o isolamento do tráfego entre determinada rede VPCs ou a rede local. Todas as redes conectadas ao gateway de trânsito poderão se conectar umas às outras. Para isolar o tráfego, você precisa usar tabelas de rotas personalizadas no gateway de trânsito. Esse padrão conecta somente a VPCs rede local usando uma única tabela de rotas padrão do Transit Gateway, que é a configuração mais simples.

## Arquitetura
<a name="centralize-network-connectivity-using-aws-transit-gateway-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS Transit Gateway
+  Site-to-SiteVPN AWS
+ VPC
+ AWS Resource Access Manager (AWS RAM)

 

**Arquitetura de destino**

![\[O AWS Transit Gateway conecta a rede local a várias contas da AWS VPCs em uma região.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e23f5faf-e75e-42a3-80e3-142516a2db4e/images/1ecf7e04-bbf8-4304-88c8-6aceb7271d1e.jpeg)


## Ferramentas
<a name="centralize-network-connectivity-using-aws-transit-gateway-tools"></a>

**Serviços da AWS**
+ O [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) ajuda você a compartilhar com segurança seus recursos entre suas contas da AWS, unidades organizacionais ou toda a sua organização a partir do AWS Organizations.
+ [O AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) é um hub central que conecta nuvens privadas virtuais (VPCs) e redes locais.

## Épicos
<a name="centralize-network-connectivity-using-aws-transit-gateway-epics"></a>

### Crie um gateway de trânsito na conta de serviços de rede
<a name="create-a-transit-gateway-in-the-network-services-account"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um gateway de trânsito | Na conta da AWS em que você deseja hospedar serviços de rede, crie um gateway de trânsito na região da AWS de destino. Para obter instruções, consulte [Criar um gateway de trânsito](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#create-tgw). Observe o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/centralize-network-connectivity-using-aws-transit-gateway.html) | Administrador de rede | 

### Conecte o gateway de trânsito à rede on-premises
<a name="connect-the-transit-gateway-to-your-on-premises-network"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configurar o dispositivo de gateway do cliente para uma conexão VPN. | O dispositivo de gateway do cliente está conectado no lado local da conexão Site-to-Site VPN entre o gateway de trânsito e sua rede local. Para obter mais informações, consulte [Seu dispositivo de gateway do cliente](https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html) na documentação do AWS Site-to-Site VPN. Identifique ou inicie um dispositivo de cliente on-premises compatível e anote seu endereço IP público. A configuração da VPN será concluída posteriormente neste épico.  | Administrador de rede | 
| Na conta de serviços de rede, crie um anexo VPN ao gateway de trânsito. | Para configurar uma conexão, crie um anexo VPN para o gateway de trânsito. Para obter instruções, consulte [Anexos VPN do Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpn-attachments.html). | Administrador de rede | 
| Configure a VPN no dispositivo de gateway do cliente na rede on-premises.  | Baixe o arquivo de configuração da conexão Site-to-Site VPN associada ao gateway de trânsito e defina as configurações de VPN no dispositivo de gateway do cliente. Para obter as instruções, consulte [Fazer o download de arquivo de configuração](https://docs.aws.amazon.com/vpn/latest/s2svpn/SetUpVPNConnections.html#vpn-download-config). | Administrador de rede | 

### Compartilhe na conta de serviços de rede o gateway de trânsito com outras contas da AWS ou com sua organização
<a name="share-the-transit-gateway-in-the-network-services-account-to-other-aws-accounts-or-your-organization"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Na conta de gerenciamento do AWS Organizations, ative o compartilhamento. | Para compartilhar o gateway de trânsito com sua organização ou com determinadas unidades organizacionais, ative o compartilhamento no AWS Organizations. Caso contrário, você precisaria compartilhar o gateway de trânsito para cada conta individualmente. Para obter instruções, consulte [Habilitar o compartilhamento de recursos no AWS Organizations](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs). | Administrador de sistemas AWS | 
| Crie o compartilhamento de recursos do gateway de trânsito na conta de serviços de rede. | Para permitir que VPCs outras contas da AWS dentro da sua organização se conectem ao gateway de trânsito, na conta de serviços de rede, use o console de RAM da AWS para compartilhar o recurso do gateway de trânsito. Para obter instruções, consulte [Criar um compartilhamento de recursos](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create). | Administrador de sistemas AWS | 

### Conecte-se VPCs ao gateway de trânsito
<a name="connect-vpcs-to-the-transit-gateway"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie anexos de VPC em contas individuais.  | Nas contas nas quais o gateway de trânsito foi compartilhado, crie anexos VPC do gateway de trânsito. Para obter instruções, consulte [Criar um anexo do gateway de trânsito para uma VPC](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#create-vpc-attachment). | Administrador de rede | 
| Aceite as solicitações de anexos VPC. | Na conta de serviços de rede, aceite as solicitações de anexo VPC do Transit Gateway. Para obter instruções, consulte [Aceitar um anexo compartilhado](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#tgw-accept-shared-attachment). | Administrador de rede | 

### Configurar o roteamento
<a name="configure-routing"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure rotas em uma conta individual VPCs. | Em cada conta VPC individual, adicione rotas para a rede on-premises e outras redes VPC usando o gateway de trânsito como destino. Para obter instruções, consulte [Adicionar e remover rotas de uma tabela de rotas](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes). | Administrador de rede | 
| Configure rotas em uma tabela de rotas do gateway de trânsito. | As rotas de VPCs e a conexão VPN devem ser propagadas e devem aparecer na tabela de rotas padrão do Transit Gateway. Se necessário, crie qualquer rota estática (um exemplo são rotas estáticas para a conexão VPN estática) na tabela de rotas padrão do Transit Gateway. Para obter instruções, consulte [Criar uma rota estática](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-create-static-route). | Administrador de rede | 
| Adicionar grupos de segurança e listas de controle de acesso (ACLs) | Para as EC2 instâncias e outros recursos na VPC, certifique-se de que as regras do grupo de segurança e as regras da ACL da rede permitam tráfego entre VPCs e a rede local. Para obter instruções, consulte [Controlar o tráfego para recursos usando grupos de segurança](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules) e [Adicionar e excluir regras de uma ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#Rules). | Administrador de rede | 

### Teste de conectividade
<a name="test-connectivity"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Teste a conectividade entre VPCs. | Certifique-se que a ACL de rede e os grupos de segurança permitam o tráfego do ICMP (Protocolo de Mensagem de Controle da Internet) e, em seguida, faça ping de instâncias em uma VPC para outra VPC que também esteja conectada ao gateway de trânsito. | Administrador de rede | 
| Teste a conectividade entre VPCs e a rede local. | Certifique-se de que as regras de ACL de rede, as regras de grupos de segurança e quaisquer firewalls permitam tráfego ICMP e, em seguida, faça ping entre a rede local e as instâncias no EC2 . VPCs A comunicação de rede deve ser iniciada primeiro a partir da rede on-premises para que a conexão VPN volte ao status `UP`. | Administrador de rede | 

## Recursos relacionados
<a name="centralize-network-connectivity-using-aws-transit-gateway-resources"></a>
+ [Criar uma infraestrutura de rede AWS dimensionável e segura de várias VPCs ](https://d1.awsstatic.com/whitepapers/building-a-scalable-and-secure-multi-vpc-aws-network-infrastructure.pdf) (AWS whitepaper)
+ [Trabalhando com recursos compartilhados](https://docs.aws.amazon.com/ram/latest/userguide/working-with.html) (documentação da AWS RAM)
+ [Trabalho com gateways de trânsito](https://docs.aws.amazon.com/vpc/latest/tgw/working-with-transit-gateways.html) (documentação do AWS Transit Gateway)

# Configure a criptografia HTTPS para o Oracle JD Edwards EnterpriseOne no Oracle WebLogic usando um Application Load Balancer
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer"></a>

*Thanigaivel Thirumalai, Amazon Web Services*

## Resumo
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-summary"></a>

Esse padrão explica como configurar a criptografia HTTPS para descarregamento de SSL no Oracle JD Edwards EnterpriseOne em cargas de trabalho Oracle. WebLogic Essa abordagem criptografa o tráfego entre o navegador do usuário e um balanceador de carga para remover a carga de criptografia dos EnterpriseOne servidores.

Muitos usuários escalam horizontalmente a máquina virtual EnterpriseOne JAVA (JVM) usando um AWS Application Load [Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html).O balanceador de carga serve como o único ponto de contato para os clientes e distribui o tráfego de entrada entre vários. JVMs Opcionalmente, o balanceador de carga pode distribuir o tráfego em várias zonas de disponibilidade e aumentar a disponibilidade de. EnterpriseOne

O processo descrito nesse padrão configura a criptografia entre o navegador e o balanceador de carga em vez de criptografar o tráfego entre o balanceador de carga e o. EnterpriseOne JVMs Essa abordagem é conhecida como *descarregamento de SSL*. Transferir o processo de descriptografia SSL da EnterpriseOne web ou do servidor de aplicativos para o Application Load Balancer reduz a carga do lado do aplicativo. Após o terminal do SSL no balanceador de carga, o tráfego não criptografado é roteado para o aplicativo na AWS.

[O Oracle JD Edwards EnterpriseOne](https://www.oracle.com/applications/jd-edwards-enterpriseone/) é uma solução de planejamento de recursos corporativos (ERP) para organizações que fabricam, constroem, distribuem, atendem ou gerenciam produtos ou ativos físicos. O JD Edwards EnterpriseOne oferece suporte a vários hardwares, sistemas operacionais e plataformas de banco de dados.

## Pré-requisitos e limitações
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Um perfil do AWS Identity and Access Management (IAM) com permissões para fazer chamadas de serviço da AWS e gerenciar recursos da AWS.
+ Um certificado SSL

**Versões do produto**
+ Esse padrão foi testado com o Oracle WebLogic 12c, mas você também pode usar outras versões.

## Arquitetura
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-architecture"></a>

Existem várias abordagens para realizar o descarregamento de SSL. Esse padrão usa um Application Load Balancer e o Oracle HTTP Server (OHS), conforme ilustrado no diagrama a seguir.

![\[Descarregamento de SSL com um balanceador de carga e OHS\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/2ae2d0eb-b9f3-41f8-ad86-9af3aade7072.png)


O diagrama a seguir mostra o layout de JD Edwards EnterpriseOne, Application Load Balancer e Java Application Server (JAS) JVM.

![\[EnterpriseOne, balanceador de carga e layout JAS JVM\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/72ea35b0-2907-48b3-aeb7-0c5d9a3b831b.png)


## Ferramentas
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-tools"></a>

**Serviços da AWS**
+ 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 o Amazon Elastic Compute Cloud ( EC2 instâncias da Amazon), em várias zonas de disponibilidade.
+ [O 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 sites e aplicativos da AWS.
+ 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.

## Práticas recomendadas
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-best-practices"></a>
+ Para conhecer as melhores práticas do ACM, consulte a [documentação do ACM.](https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html)

## Épicos
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-epics"></a>

### Configuração WebLogic e OHS
<a name="set-up-weblogic-and-ohs"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale e configure os componentes do Oracle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrador WebLogic  | 
| Ative o WebLogic plug-in no nível do domínio. | O WebLogic plug-in é necessário para o balanceamento de carga. Para habilitar o plug-in:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrador WebLogic  | 
| Edite o arquivo de configuração do . | O `mod_wl_ohs.conf` arquivo configura solicitações de proxy do OHS para. WebLogic[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)<pre><VirtualHost *:8000><br /><Location /jde><br />WLSRequest On<br />SetHandler weblogic-handler<br />WebLogicHost localhost<br />WebLogicPort 8000<br />WLProxySSL On<br />WLProxySSLPassThrough On<br /></Location><br /></VirtualHost></pre> | JDE CNC, administrador WebLogic  | 
| Inicie o OHS usando o Enterprise Manager. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrador WebLogic  | 

### Configure o Application Load Balancer
<a name="configure-the-application-load-balancer"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| configure um grupo de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Para obter instruções detalhadas, consulte a [documentação do Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html). | Administrador da AWS | 
| Configure o balanceador de carga. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | Administrador da AWS | 
| Adicionar um registro no Route 53 (DNS). | (Opcional) Você poderá adicionar um registro DNS do Amazon Route 53 para o subdomínio. Esse registro apontaria para seu Application Load Balancer. Para obter instruções, consulte a [Documentação do Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html). | Administrador da AWS | 

## Solução de problemas
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O servidor HTTP não aparece. | Se o **Servidor HTTP** não aparecer na lista de **Navegação de Destino** no console do Enterprise Manager, siga estas etapas:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Quando a instância for criada e as alterações forem ativadas, você poderá ver o servidor HTTP no painel **Target Navigation**. | 

## Recursos relacionados
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-resources"></a>

**Documentação da AWS**
+ [Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
+ [Trabalhar com zonas hospedadas públicas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/AboutHZWorkingWith.html)
+ [Trabalhar com zonas hospedadas privadas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)

**Documentação da Oracle:**
+ [Visão geral do plug-in Oracle WebLogic Server Proxy](https://docs.oracle.com/middleware/1221/webtier/develop-plugin/overview.htm#PLGWL391)
+ [Instalando WebLogic o servidor usando o instalador de infraestrutura](https://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/12_2_1/02-01-004-InstallWLSInfrastructure/installweblogicinfrastructure.html)
+ [Instalar e configurar o Oracle HTTP Server](https://docs.oracle.com/middleware/1221/core/install-ohs/toc.htm)

# Conecte-se ao ambiente de gerenciamento e dados do Application Migration Service em uma rede privada
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network"></a>

*Dipin Jain e Mike Kuznetsov, Amazon Web Services*

## Resumo
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-summary"></a>

Esse padrão explica como você pode se conectar a um plano de AWS Application Migration Service dados e a um plano de controle em uma rede privada e segura usando endpoints VPC de interface.

O Application Migration Service é uma solução altamente automatizada lift-and-shift (rehospedagem) que simplifica, agiliza e reduz o custo da migração de aplicativos para o. AWS Ele permite que as empresas possam redefinir a hospedagem de um grande número de servidores físicos, virtuais ou em nuvem sem problemas de compatibilidade, interrupção no desempenho ou longos períodos de substituição. O Application Migration Service pode ser acessado pelo Console de gerenciamento da AWS. Isso permite uma integração perfeita com outros Serviços da AWS AWS CloudTrail, como Amazon CloudWatch e AWS Identity and Access Management (IAM).

Você pode se conectar de um data center de origem a um plano de dados, ou seja, a uma sub-rede que serve como área de preparação para replicação de dados na VPC de destino, por meio de uma conexão privada usando serviços ou emparelhamento de VPC no Application Migration Site-to-Site VPN Service. AWS Direct Connect Você também pode usar [endpoints VPC de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) alimentados por AWS PrivateLink para se conectar a um plano de controle do Application Migration Service por meio de uma rede privada. 

## Pré-requisitos e limitações
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-prereqs"></a>

**Pré-requisitos **
+ **Sub-rede da área de teste** — Antes de configurar o Application Migration Service, crie uma sub-rede para ser usada como área de preparação para dados replicados dos seus servidores de origem para AWS (ou seja, um plano de dados). Você deve especificar essa sub-rede no [modelo de Configurações de Replicação](https://docs.aws.amazon.com/mgn/latest/ug/template-vs-server.html) ao acessar pela primeira vez o console do Application Migration Service. Você pode substituir essa sub-rede para servidores de origem específicos no modelo de Configurações de Replicação. Embora você possa usar uma sub-rede existente na sua Conta da AWS, recomendamos que você crie uma nova sub-rede dedicada para essa finalidade.
+ **Requisitos de rede** — Os servidores de replicação que são iniciados pelo Serviço de Migração de Aplicativos na sub-rede da sua área de armazenamento precisam ser capazes de enviar dados para o endpoint da API do Serviço de Migração de Aplicativos em`https://mgn.<region>.amazonaws.com/`, onde `<region>` está o código para o qual Região da AWS você está replicando (por exemplo,). `https://mgn.us-east-1.amazonaws.com` O serviço Amazon Simple Storage Service (Amazon S3) é necessário para baixar o software Application Migration URLs Service.
  + O instalador do AWS Replication Agent deve ter acesso à URL do bucket do Amazon Simple Storage Service (Amazon S3) do bucket que Região da AWS você está usando com o Application Migration Service.
  + A sub-rede da área de armazenamento deve ter acesso ao Amazon S3.
  + Os servidores de origem nos quais o AWS Replication Agent está instalado devem ser capazes de enviar dados para os servidores de replicação na sub-rede da área de armazenamento e para o endpoint da API do Application Migration Service em. `https://mgn.<region>.amazonaws.com/`

A tabela a seguir lista as portas necessárias.


| 
| 
| Fonte | Destino | Porta | Para obter mais informações, consulte | 
| --- |--- |--- |--- |
| Seu data center de origem | Serviço Amazon S3 URLs | 443 (TCP) | [Comunicação pela porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Seu data center de origem | Endereço do console do Application Migration Service específico para cada Região da AWS | 443 (TCP) | [Comunicação entre os servidores de origem e o Serviço de Migração de Aplicativos pela porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Source-Manager-TCP-443) | 
| Seu datacenter de origem | Sub-rede de área de teste | 1500 (TCP) | [Comunicação entre os servidores de origem e a sub-rede da área de armazenamento pela porta TCP 1500](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-1500) | 
| Sub-rede de área de teste | Endereço do console do Application Migration Service específico para cada Região da AWS | 443 (TCP) | [Comunicação entre a sub-rede da área de armazenamento e o Serviço de Migração de Aplicativos pela porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-443-Staging) | 
| Sub-rede de área de teste | Serviço Amazon S3 URLs | 443 (TCP) | [Comunicação pela porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Sub-rede de área de teste | Endpoint Amazon Elastic Compute Cloud (Amazon EC2) da sub-rede Região da AWS | 443 (TCP) | [Comunicação pela porta TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 

** Limitações**

O Application Migration Service não está disponível atualmente em todos Regiões da AWS os sistemas operacionais.
+ [Suportado Regiões da AWS](https://docs.aws.amazon.com/mgn/latest/ug/supported-regions.html)
+ [Sistemas operacionais com suporte](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html)

## Arquitetura
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-architecture"></a>

O diagrama a seguir ilustra a arquitetura de rede para uma migração típica. Para obter mais informações sobre essa arquitetura, consulte a [documentação do Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/Network-Settings-Video.html) e o [vídeo sobre arquitetura do serviço e arquitetura de rede do Application Migration Service](https://youtu.be/ao8geVzmmRo).

![\[Arquitetura de rede para o Application Migration Service para uma migração típica\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/546598b2-8026-4849-a441-eaa2bc2bf6bb.png)


A visualização detalhada a seguir mostra a configuração dos endpoints da VPC de interface na área de armazenamento VPC para conectar o Amazon S3 e o Application Migration Service.

![\[Arquitetura de rede para o Application Migration Service para uma migração típica; visão detalhada\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/bd0dfd42-4ab0-466f-b696-804dedcf4513.png)


## Ferramentas
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-tools"></a>
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)simplifica, agiliza e reduz o custo de rehospedar aplicativos. AWS
+ [Os endpoints VPC de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) permitem que você se conecte a serviços que são fornecidos AWS PrivateLink sem a necessidade de um gateway de internet, dispositivo NAT, conexão VPN ou conexão. AWS Direct Connect As instâncias na sua VPC não exigem que endereços IP públicos se comuniquem com recursos no serviço. O tráfego entre a sua VPC e os outros serviços não deixa a rede da Amazon.

## Épicos
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-epics"></a>

### Crie endpoints para o Application Migration Service EC2, Amazon e Amazon S3
<a name="create-endpoints-for-mgn-ec2-and-s3"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o endpoint da interface para o Application Migration Service. | O datacenter de origem e a área de armazenamento (VPC) se conectam de forma privada ao ambiente de gerenciamento do Application Migration Service por meio do endpoint de interface que você cria na VPC da área de armazenamento de destino. Para criar o endpoint:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Para obter mais informações, consulte [Acessar e AWS service (Serviço da AWS) usar uma interface VPC endpoint na documentação da Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html). | Líder de migração | 
| Configure o endpoint da interface para a Amazon EC2. | A área de teste (VPC) se conecta de forma privada à API da EC2 Amazon por meio do endpoint de interface que você cria na VPC da área de armazenamento de destino. Para criar o endpoint, siga as instruções fornecidas na história anterior.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html) | Líder de migração | 
| Configure o endpoint de interface para o Amazon S3. | O datacenter de origem e a área de armazenamento (VPC) se conectam de forma privada à API do Amazon S3 por meio do endpoint de interface que você cria na VPC da área de armazenamento de destino. Para criar o endpoint, siga as instruções fornecidas na primeira história.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Um endpoint da interface é usado porque não é possível estender conexões de endpoint gateway para além da VPC. (Para obter mais detalhes, consulte a [documentação do AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html).) | Líder de migração | 
| Configurar o endpoint do gateway do Amazon S3. | Durante a fase de configuração, o servidor de replicação precisa se conectar a um bucket S3 para baixar as atualizações de software do servidor AWS de replicação. No entanto, os endpoints da interface do Amazon S3 não oferecem suporte a nomes DNS privados*,* e não há como fornecer um nome DNS de endpoint do Amazon S3 a um servidor de replicação. Para mitigar esse problema, você cria um endpoint de gateway Amazon S3 na VPC à qual a sub-rede da área de teste pertence e atualiza as tabelas de rotas da sub-rede de teste com as rotas relevantes. Para obter mais informações, consulte [Criar um endpoint de gateway](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3) na AWS PrivateLink documentação. | Administrador de nuvem | 
| Configure o DNS on-premises para resolver nomes DNS privados para endpoints. | Os endpoints de interface do Application Migration Service e da Amazon EC2 têm nomes DNS privados que podem ser resolvidos na VPC. No entanto, você também precisa configurar servidores on-premises para resolver nomes DNS privados para esses endpoints de interface.Há várias maneiras de configurar esses servidores. Nesse padrão, testamos essa funcionalidade encaminhando consultas de DNS locais para o endpoint de Amazon Route 53 Resolver entrada na área de teste VPC. Para obter mais informações, consulte [Resolvendo consultas de DNS entre VPCs e sua rede](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-overview-DSN-queries-to-vpc.html) na documentação do Route 53. | Engenheiro de migração | 

### Conecte-se ao ambiente de gerenciamento do Application Migration Service por meio de um link privado
<a name="connect-to-the-mgn-control-plane-over-a-private-link"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale o Agente AWS de Replicação usando o. AWS PrivateLink | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Veja um exemplo para Linux:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Depois de estabelecer sua conexão com o Application Migration Service e instalar o AWS Replication Agent, siga as instruções na [documentação do Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html) para migrar seus servidores de origem para sua VPC e sub-rede de destino. | Engenheiro de migração | 

## Recursos relacionados
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-resources"></a>

**Documentação do serviço de migração de aplicativos**
+ [Conceitos](https://docs.aws.amazon.com/mgn/latest/ug/CloudEndure-Concepts.html)
+ [fluxo de trabalho de migração](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html)
+ [Guia de início rápido](https://docs.aws.amazon.com/mgn/latest/ug/quick-start-guide-gs.html)
+ [PERGUNTAS FREQUENTES](https://docs.aws.amazon.com/mgn/latest/ug/FAQ.html)
+ [Solução de problemas](https://docs.aws.amazon.com/mgn/latest/ug/troubleshooting.html)

**Recursos adicionais**
+ [Hospedando novamente seus aplicativos em uma arquitetura de várias contas usando endpoints de interface VPC](https://docs.aws.amazon.com/prescriptive-guidance/latest/rehost-multi-account-architecture-interface-endpoints/) (guia de orientação prescritiva) AWS AWS 
+ [AWS Application Migration Service — Uma introdução técnica](https://www.aws.training/Details/eLearning?id=71732) (passo a passo de AWS treinamento e certificação)
+ [AWS Application Migration Service arquitetura e arquitetura de rede](https://youtu.be/ao8geVzmmRo) (vídeo)

## Mais informações
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-additional"></a>

**Solução de problemas de** **instalações *AWS *do Replication Agent em servidores Linux**

Se você receber um erro **gcc** em um servidor Amazon Linux, configure o repositório de pacotes e use o seguinte comando:

```
## sudo yum groupinstall "Development Tools"
```

# Crie objetos Infoblox usando recursos CloudFormation personalizados da AWS e Amazon SNS
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns"></a>

*Tim Sutton, Amazon Web Services*

## Resumo
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-summary"></a>

**Aviso**: não AWS Cloud9 está mais disponível para novos clientes. Os clientes existentes do AWS Cloud9 podem continuar usando o serviço normalmente. [Saiba mais](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

O Sistema de Nomes de Domínio (DNS) do Infoblox, o Protocolo de Configuração Dinâmica de Host (DHCP) e o gerenciamento de endereços IP ([Infoblox DDI](https://www.infoblox.com/products/ddi/)) permitem centralizar e controlar com eficiência um ambiente híbrido complexo. Com o Infoblox DDI, você pode descobrir e registrar todos os ativos de rede em um banco de dados autoritário de gerenciamento de endereços IP (IPAM), além de gerenciar o DNS on-premises e na nuvem da Amazon Web Services (AWS) usando os mesmos dispositivos.

Esse padrão descreve como usar um recurso CloudFormation personalizado da AWS para criar objetos Infoblox (por exemplo, registros DNS ou objetos IPAM) chamando a API Infoblox WAPI. Para obter mais informações sobre a WAPI do Infoblox, consulte a [Documentação do WAPI](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-infoblox-rest-api.pdf) na documentação do Infoblox.

Ao usar essa abordagem padrão, você pode obter uma visão unificada dos registros DNS e das configurações IPAM para seus ambientes on-premises e da AWS, além de remover processos manuais que criam registros e provisionam suas redes. É possível usar a abordagem desse padrão para os seguintes casos de uso:
+ Adicionar um registro A após criar uma instância do Amazon Elastic Compute Cloud (Amazon EC2) 
+ Adicionar um registro CNAME após criar um Application Load Balancer
+ Adicionar um objeto de rede após criar uma nuvem privada virtual (VPC)
+ Fornecendo o próximo intervalo de rede e usando esse intervalo para criar sub-redes

Você também pode estender esse padrão e usar outros recursos do dispositivo Infoblox, como adicionar diferentes tipos de registro DNS ou configurar o Infoblox vDiscovery. 

O padrão usa um hub-and-spoke design no qual o hub exige conectividade com o dispositivo Infoblox na nuvem da AWS ou no local e usa o AWS Lambda para chamar a API da Infoblox. O spoke está na mesma conta ou em uma conta diferente na mesma organização no AWS Organizations e chama a função Lambda usando um recurso CloudFormation personalizado da AWS.

## Pré-requisitos e limitações
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-prereqs"></a>

**Pré-requisitos **
+ Um dispositivo ou grade existente da Infoblox, instalado na nuvem AWS, on-premises ou em ambos, e configurado com um usuário administrador que pode administrar ações de IPAM e DNS. Para obter mais informações sobre isso, consulte [Sobre contas de administrador](https://docs.infoblox.com/display/nios86/About+Admin+Accounts) na documentação do Infoblox. 
+ Uma zona autoritativa de DNS existente na qual você deseja adicionar registros no dispositivo Infoblox. Para obter mais informações sobre isso, consulte [Configurando zonas autoritativas](https://docs.infoblox.com/display/nios86/Configuring+Authoritative+Zones) na documentação do Infoblox.  
+ Duas contas ativas da AWS no AWS Organizations. Uma conta é a conta hub e a outra conta é a conta spoke.
+ O hub e as contas spoke devem estar na mesma região da AWS. 
+ A VPC da conta do hub deve se conectar ao dispositivo Infoblox; por exemplo, usando o AWS Transit Gateway ou emparelhamento da VPC.
+ [AWS Serverless Application Model (AWS SAM), instalado e configurado localmente com o AWS](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) Cloud9 ou AWS. CloudShell
+ Os arquivos `Infoblox-Hub.zip` e `ClientTest.yaml` (anexados), baixados para o ambiente local que contém o AWS SAM.

**Limitações**
+ O token de serviço do recurso CloudFormation personalizado da AWS deve ser da mesma região em que a pilha foi criada. Recomendamos usar uma conta hub em cada região, em vez de criar um tópico do Amazon Simple Notiﬁcation Service (Amazon SNS) em uma região e chamar a função do Lambda em outra.

**Versões do produto**
+ Infoblox WAPI versão 2.7

## Arquitetura
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-architecture"></a>

O diagrama a seguir mostra o fluxo de trabalho desse padrão. 

![\[Criação de objetos Infoblox usando recursos CloudFormation personalizados da AWS e Amazon SNS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/8d609d3f-6f5e-4084-849f-ca191db8055e/images/3594a064-e103-4211-84b7-da67c41ebb15.png)


O diagrama mostra os seguintes componentes para a solução desse padrão:

1. Os recursos CloudFormation personalizados da AWS permitem que você escreva uma lógica de provisionamento personalizada em modelos que a AWS CloudFormation executa quando você cria, atualiza ou exclui pilhas. Quando você cria uma pilha, a AWS CloudFormation envia uma `create` solicitação para um tópico do SNS que é monitorado por um aplicativo executado em uma EC2 instância.

1. A notificação do Amazon SNS do recurso CloudFormation personalizado da AWS é criptografada por meio de uma chave específica do AWS Key Management Service (AWS KMS) e o acesso é restrito às contas da sua organização em Organizations. O tópico do SNS inicia o recurso Lambda que chama a API WAPI da Infoblox.

1. O Amazon SNS invoca as seguintes funções do Lambda que usam o URL WAPI do Infoblox, o nome de usuário e a senha do AWS Secrets Manager Amazon Resource Names () como variáveis de ambiente: ARNs 
   + `dnsapi.lambda_handler`— Recebe os `DNSValue` valores `DNSName``DNSType`,, e do recurso CloudFormation personalizado da AWS e os usa para criar registros DNS A e CNAMES.
   + `ipaddr.lambda_handler`— Recebe os `Network Name` valores `VPCCIDR``Type`,`SubnetPrefix`, e do recurso CloudFormation personalizado da AWS e os usa para adicionar os dados da rede ao banco de dados IPAM da Infoblox ou fornecer ao recurso personalizado a próxima rede disponível que pode ser usada para criar novas sub-redes.
   + `describeprefixes.lambda_handler`: chama a API da AWS `describe_managed_prefix_lists` usando o filtro `"com.amazonaws."+Region+".s3"` para recuperar a `prefix ID` necessária.
**Importante**  
Essas funções do Lambda são escritas em Python e são semelhantes entre si, mas têm chamadas diferentes. APIs

1. Você pode implantar a grade Infoblox como dispositivos de rede físicos, virtuais ou baseados em nuvem.  Ele pode ser implantado localmente ou como um dispositivo virtual usando uma variedade de hipervisores, incluindo VMware ESXi Microsoft Hyper-V, Linux KVM e Xen. Você também pode implantar a grade do Infoblox na nuvem AWS com uma imagem de máquina da Amazon (AMI).

1. O diagrama mostra uma solução híbrida para a grade da Infoblox que fornece DNS e IPAM para recursos na nuvem AWS e on-premises.

**Pilha de tecnologia**
+ AWS CloudFormation
+ IAM
+ AWS KMS
+ AWS Lambda
+ AWS SAM
+ AWS Secrets Manager
+ Amazon SNS
+ Amazon VPC 

## Ferramentas
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-tools"></a>
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS.
+ 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 Key Management Service (AWS KMS) ](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)ajuda você a criar e controlar chaves criptográficas para proteger seus dados.
+ 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 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) é um serviço de gerenciamento de contas que ajuda a consolidar várias contas da AWS em uma organização que você cria e gerencia de maneira centralizada.
+ O [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) ajuda você a substituir credenciais codificadas em seu código, incluindo senhas, por uma chamada de API ao Secrets Manager para recuperar o segredo programaticamente.
+ O [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) é uma estrutura de código aberto que ajuda na criação de aplicativos sem servidor na Nuvem AWS.
+ 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.
+ A [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda a iniciar recursos da AWS em uma rede virtual definida por você. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

**Código **

Você pode usar o CloudFormation modelo de `ClientTest.yaml` amostra da AWS (anexado) para testar o hub Infoblox. Você pode personalizar o CloudFormation modelo da AWS para incluir os recursos personalizados da tabela a seguir.


|  | 
| --- |
| Crie um registro A usando o recurso personalizado Infoblox spoke | Retornar valores: `infobloxref `: referências do InfobloxExemplo de recurso:

```
ARECORDCustomResource:

  Type: "Custom::InfobloxAPI"

  Properties:

    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxDNSFunction

    DNSName: 'arecordtest.company.com'

    DNSType: 'ARecord' 

    DNSValue: '10.0.0.1'
``` | 
| --- |--- |
| Crie um registro CNAME usando o recurso personalizado Infoblox spoke | **Retornar valores**: `infobloxref `: referências do Infoblox**Exemplo de recurso**:<pre>CNAMECustomResource:<br /><br />  Type: "Custom::InfobloxAPI"<br /><br />  Properties:<br /><br />    ServiceToken: !Sub arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfoblox    <br /><br />    DNSFunction<br /><br />    DNSName: 'cnametest.company.com'<br /><br />    DNSType: 'cname' <br /><br />    DNSValue: 'aws.amazon.com'</pre> | 
| Crie um objeto de rede usando o recurso personalizado Infoblox spoke | **Retornar valores:**`infobloxref `: referências do Infoblox`network`: alcance da rede (o mesmo do `VPCCIDR`)**Exemplo de recurso:**<pre>VPCCustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: VPC<br /><br />    NetworkName: My-VPC</pre> | 
| Recupere a próxima sub-rede disponível usando o recurso personalizado Infoblox spoke | **Retornar valores:**`infobloxref`: referências do Infoblox`network `: o alcance da rede da sub-rede**Exemplo de recurso:**<pre>Subnet1CustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  DependsOn: VPCCustomResource<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: Subnet<br /><br />    SubnetPrefix: !Ref SubnetPrefix<br /><br />NetworkName: My-Subnet</pre> | 

## Épicos
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-epics"></a>

### Crie e configure a VPC da conta do hub
<a name="create-and-configure-the-hub-accountrsquor-s-vpc"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma VPC com uma conexão com o dispositivo Infoblox. | Faça login no Console de Gerenciamento da AWS da sua conta do hub e crie uma VPC seguindo as etapas na [Amazon VPC na implantação de referência de Início Rápido da Nuvem AWS](https://aws-quickstart.github.io/quickstart-aws-vpc/) a partir do AWS Quick Starts.A VPC deve ter conectividade HTTPS com o dispositivo do Infoblox, e recomendamos que você use uma sub-rede privada para essa conexão. | Administrador de rede, administrador de sistema | 
| (Opcional) Crie os endpoints da VPC para sub-redes privadas.  | Os endpoints da VPC fornecem conectividade a serviços públicos para suas sub-redes privadas. Os seguintes endpoints são exigidos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html)Para obter mais informações sobre como criar endpoints para sub-redes privadas, consulte [Endpoints da VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html) na documentação da Amazon VPC. | Administrador de rede, Administrador de sistemas | 

### Implemente o hub Infoblox
<a name="deploy-the-infoblox-hub"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o modelo do AWS SAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html) | Desenvolvedor, Administrador de sistemas | 
| Implante o modelo do SAM da AWS. | O `sam deploy` comando pega os parâmetros necessários e os salva no `samconfig.toml` arquivo, armazena o CloudFormation modelo da AWS e as funções do Lambda em um bucket do S3 e, em seguida, implanta o modelo da CloudFormation AWS em sua conta do hub.  O código de exemplo a seguir mostra como implantar o modelo do SAM da AWS:<pre>$ sam deploy --guided<br /><br />Configuring SAM deploy<br />======================<br />        Looking for config file [samconfig.toml] :  Found<br />        Reading default arguments  :  Success<br />        Setting default arguments for 'sam deploy'<br />        =========================================<br />        Stack Name [Infoblox-Hub]:<br />        AWS Region [eu-west-1]:<br />        Parameter InfobloxUsername:<br />        Parameter InfobloxPassword:<br />        Parameter InfobloxIPAddress [xxx.xxx.xx.xxx]:<br />        Parameter AWSOrganisationID [o-xxxxxxxxx]:<br />        Parameter VPCID [vpc-xxxxxxxxx]:<br />        Parameter VPCCIDR [xxx.xxx.xxx.xxx/16]:<br />        Parameter VPCSubnetID1 [subnet-xxx]:<br />        Parameter VPCSubnetID2 [subnet-xxx]:<br />        Parameter VPCSubnetID3 [subnet-xxx]:<br />        Parameter VPCSubnetID4 []: <br />        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy<br />        Confirm changes before deploy [Y/n]: y<br />        #SAM needs permission to be able to create roles to connect to the resources in your template<br />Allow SAM CLI IAM role creation [Y/n]: n<br />Capabilities [['CAPABILITY_NAMED_IAM']]:<br />        Save arguments to configuration file [Y/n]: y<br />        SAM configuration file [samconfig.toml]:<br />        SAM configuration environment [default]: </pre>É necessário usar a opção `--guided` em cada ocasião, já que as credenciais de acesso do Infoblox não são armazenadas no arquivo `samconfig.toml`. | Desenvolvedor, Administrador de sistemas | 

## Recursos relacionados
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-resources"></a>
+ [Começando a WAPIs usar o Postman](https://blogs.infoblox.com/community/getting-started-with-wapis-using-postman/) (Infoblox Blog)
+ [Provisionamento de vNIOS para AWS usando o modelo BYOL](https://docs.infoblox.com/display/NAIG/Provisioning+vNIOS+for+AWS+Using+the+BYOL+Model) (documentação do Infoblox)
+ [quickstart-aws-vpc](https://github.com/aws-quickstart/quickstart-aws-vpc)(GitHub recompra)
+ [describe\$1managed\$1prefix\$1lists](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_managed_prefix_lists) (documentação do AWS SDK para Python)

## Anexos
<a name="attachments-8d609d3f-6f5e-4084-849f-ca191db8055e"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/8d609d3f-6f5e-4084-849f-ca191db8055e/attachments/attachment.zip)

# Crie uma arquitetura IPAM hierárquica e multirregional usando o Terraform AWS
<a name="multi-region-ipam-architecture"></a>

*Donny Schreiber, Amazon Web Services*

## Resumo
<a name="multi-region-ipam-architecture-summary"></a>

O *Gerenciamento de endereços IP (IPAM)* é um componente essencial do gerenciamento de rede e se torna cada vez mais complexo à medida que as organizações escalam sua infraestrutura de nuvem. Sem o IPAM adequado, as organizações correm o risco de conflitos de endereço IP, desperdício de espaço de endereço e solução complexa de problemas que podem levar a interrupções e tempo de inatividade das aplicações. Esse padrão demonstra como implementar uma solução IPAM abrangente para ambientes AWS corporativos usando HashiCorp o Terraform. [Ele ajuda as organizações a criar uma arquitetura IPAM hierárquica e multirregional que facilita o gerenciamento centralizado de endereços IP em toda a organização. Contas da AWSAWS](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organization-structure)

Este padrão ajuda você a implementar o [Gerenciador de endereços IP da Amazon VPC](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) com uma sofisticada hierarquia de quatro camadas: pool de nível superior, pools regionais, pools de unidades de negócios e pools específicos do ambiente. Essa estrutura oferece suporte à governança adequada de endereços IP e, ao mesmo tempo, permite a delegação do gerenciamento de IP às equipes apropriadas da organização. A solução usa AWS Resource Access Manager (AWS RAM) para compartilhar facilmente os pools do IP Address Manager em toda a organização. AWS RAM centraliza e padroniza as especificações do IPAM, que as equipes podem usar em todas as contas gerenciadas.

Com este padrão você pode fazer o seguinte:
+ Automatize a alocação de endereços IP entre Regiões da AWS unidades de negócios e ambientes.
+ Impor as políticas de rede organizacional por meio da validação programática.
+ Dimensionar a infraestrutura de rede com eficiência à medida que os requisitos de negócios evoluem.
+ Reduzir a sobrecarga operacional por meio do gerenciamento centralizado de espaços de endereço IP.
+ Acelerar as implantações de workloads nativas da nuvem com alocação de faixa CIDR de autoatendimento.
+ Evitar conflitos de endereço por meio de controles e validação baseados em políticas.

## Pré-requisitos e limitações
<a name="multi-region-ipam-architecture-prereqs"></a>

**Pré-requisitos **
+ Um ou mais Contas da AWS, gerenciado como uma organização em AWS Organizations.
+ Um hub de rede ou conta gerencial de rede que servirá como administrador delegado do Gerenciador de Endereços IP.
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ Terraform versão 1.5.0 ou posterior [instalado](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ AWS Provedor para Terraform, [configurado](https://registry.terraform.io/providers/hashicorp/aws/latest/docs).
+ Permissões para gerenciar [o Gerenciador de Endereços IP](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html) e [as nuvens privadas virtuais (VPCs)](https://docs.aws.amazon.com/vpc/latest/userguide/security-iam.html), configuradas em AWS Identity and Access Management (IAM). [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/security-iam.html)

**Limitações**
+ O Gerenciador de Endereços IP está sujeito às [cotas de serviço](https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html). A cota de serviço padrão para pools é de 50 por escopo. Executar essa implantação em seis regiões, duas unidades de negócios e quatro ambientes criaria 67 pools. Portanto, um aumento de cota pode ser necessário.
+ Modificar ou excluir os pools do Gerenciador de Endereços IP após a alocação dos recursos pode causar problemas de dependência. É necessário [liberar as alocações](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) antes para que o grupo possa ser excluído.
+ No Gerenciador de Endereços IP, o [monitoramento de recursos](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) pode sofrer um pequeno atraso ao refletir as alterações nos recursos. Esse atraso pode ser de aproximadamente 20 minutos.
+ O Gerenciador de Endereços IP não pode impor automaticamente a exclusividade do endereço IP em diferentes escopos.
+ As marcações personalizadas devem seguir as [Práticas recomendadas de marcação da AWS](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html). Por exemplo, cada chave deve ser única e não pode começar com `aws:`.
+ Existem [considerações e limitações](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam-outside-org-considerations.html) ao integrar o Gerenciador de endeçoes IP a contas fora da sua organização.

## Arquitetura
<a name="multi-region-ipam-architecture-architecture"></a>

**Arquitetura de destino**

*Configuração do Gerenciador de endereços IP e hierarquia do pool*

O diagrama abaixo mostra os constructos lógicos da arquitetura de destino. Um *escopo* é o contêiner de nível mais alto no Gerenciador de endereços IP. Cada escopo representa o espaço de endereços IP de uma única rede. Os *pools* são coleções de intervalos de endereços IP contíguos (ou intervalos CIDR) dentro do escopo. Os grupos ajudam você a organizar os endereços IP de acordo com suas necessidades de roteamento e segurança. Este diagrama mostra quatro níveis hierárquicos de pools: um pool de nível superior, pools regionais, pools de unidades de negócios e pools de ambientes.

![\[Um escopo privado e quatro níveis de pools em uma única região da AWS em uma conta de rede.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/1e23b2a7-a274-4a19-9097-61d8a31dfbf8.png)


Essa solução estabelece uma hierarquia clara dos pools do Gerenciador de Endereços IP:

1. O pool de nível superior abrange todo o espaço de endereços IP organizacionais, como `10.176.0.0/12`.

1. Os pools regionais são para alocações específicas da região, como para `10.176.0.0/15` e `us-east-1`.

1. Os pools de unidades de negócios são alocações específicas de domínio dentro de cada um. Região da AWS Por exemplo, a unidade de negócios financeiros da Região `us-east-1` pode ter `10.176.0.0/16`.

1. Os pools de ambientes são alocações específicas para diferentes ambientes. Por exemplo, a unidade de negócios financeiros da Região `us-east-1` pode ter `10.176.0.0/18` como um ambiente de produção.

Essa topologia de implantação distribui geograficamente os recursos do Gerenciador de endereços IP, mantendo o controle centralizado. Seguem abaixo seus recursos:
+ O IP Address Manager é implantado em um único sistema primário Região da AWS.
+ Regiões adicionais são registradas como [regiões operacionais](https://docs.aws.amazon.com/vpc/latest/ipam/mod-ipam-region.html), nas quais o Gerenciador de endereços IP pode gerenciar recursos.
+ Cada região operacional recebe um pool de endereços dedicado do pool de nível superior.
+ Os recursos em todas as regiões operacionais são gerenciados centralmente por meio do Gerenciador de endereços IP na região principal.
+ Cada pool regional tem uma propriedade local vinculada à sua região para ajudá-lo a alocar recursos adequadamente.

*Validação avançada do intervalo CIDR*

Essa solução foi projetada para impedir a implantação de configurações inválidas. Quando você implanta os pools por meio do Terraform, o seguinte é validado durante a fase de planejamento do Terraform:
+ Valida se todos os intervalos CIDR do ambiente estão contidos nos intervalos CIDR da unidade de negócios principal
+ Confirma que todos os intervalos de CIDR da unidade de negócios estão contidos em seus intervalos de CIDR regionais principais
+ Verifica se todos os intervalos CIDR regionais estão contidos nos intervalos CIDR de nível superior
+ Verifica a sobreposição de intervalos CIDR dentro do mesmo nível hierárquico
+ Valida o mapeamento adequado dos ambientes para suas respectivas unidades de negócios

*Alocação do intervalo CIDR*

O diagrama a seguir mostra um exemplo de como desenvolvedores ou administradores podem criar novos endereços IP VPCs e alocá-los a partir dos níveis do pool.

![\[Um escopo privado e quatro níveis de pools em uma única região da AWS em uma conta de rede.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/7c3de2e3-e71b-4fc0-abcd-7e88cfab5c87.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Por meio do Console de gerenciamento da AWS AWS CLI, ou por meio da infraestrutura como código (IaC), um desenvolvedor ou administrador solicita a próxima faixa de CIDR disponível no pool do `AY3` ambiente.

1. O Gerenciador de endereços IP aloca o próximo intervalo CIDR disponível nesse pool para a VPC `AY3-4`. Esse intervalo CIDR não pode mais ser usado.

**Automação e escala**

Essa solução foi projetada para ser escalável da seguinte forma:
+ **Expansão regional**: adicione novas regiões estendendo a configuração do Terraform com entradas adicionais do pool regional.
+ **Crescimento da unidade de negócios**: ofereça suporte para novas unidades de negócios adicionando-as ao mapa de configuração da BU.
+ **Flexibilidade do ambiente**: configure diferentes tipos de ambiente, como desenvolvimento ou produção, com base nas necessidades organizacionais.
+ **Suporte para várias contas** — compartilhe pools em todas as contas da sua organização por meio AWS RAM de.
+ **Provisionamento automatizado de VPC**: Integre-se aos fluxos de trabalho de provisionamento de VPC para automatizar a alocação de intervalos de CIDR.

A estrutura hierárquica também permite diferentes escalas de delegação e controle, como as seguintes:
+ Os administradores de rede podem gerenciar os pools regionais e de nível superior.
+ As equipes de TI da unidade de negócios podem ter delegado o controle de seus respectivos pools.
+ As equipes de aplicações podem consumir endereços IP de seus pools de ambientes designados.

**nota**  
Você também pode integrar essa solução ao [AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html). Para obter mais informações, consulte *Integração com o AFT* na seção [Informações adicionais](#multi-region-ipam-architecture-additional) deste padrão.

## Ferramentas
<a name="multi-region-ipam-architecture-tools"></a>

**Serviços da AWS**
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ajuda você a monitorar as métricas dos seus AWS recursos e dos aplicativos em que você executa AWS em tempo real.
+ [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 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.
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) ajuda você a compartilhar seus recursos com segurança Contas da AWS para reduzir a sobrecarga operacional e fornecer visibilidade e auditabilidade.
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS. O [Gerenciador de endereços IP](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) é um recurso da Amazon VPC. Ele ajuda você a planejar, rastrear e monitorar endereços IP para suas AWS cargas de trabalho.

**Outras ferramentas**
+ O [HashiCorp Terraform](https://www.terraform.io/docs) é uma ferramenta de infraestrutura como código (IaC) que ajuda a provisionar e gerenciar recursos e infraestrutura de nuvem por meio de código.

**Repositório de código**

O código desse padrão está disponível no [Sample Terraform Implementation for Hierarchical IPAM](https://github.com/aws-samples/sample-amazon-vpc-ipam-terraform) no repositório em. AWS** GitHub** A estrutura do repositório inclui:
+ **Módulo raiz**: orquestração de implantação e variáveis de entrada.
+ **Módulo IPAM**: implementação principal da arquitetura descrita neste padrão.
+ **Módulo de marcações**: marcação padronizada para todos os recursos.

## Práticas recomendadas
<a name="multi-region-ipam-architecture-best-practices"></a>

Considere as seguintes práticas recomendadas para o planejamento de rede:
+ **Planeje primeiro**: planeje minuciosamente seu espaço de endereço IP antes da implantação. Para obter mais informações, consulte [Planejar o provisionamento de endereços IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html).
+ **Evite intervalos CIDR sobrepostos**: certifique-se de que os intervalos CIDR em cada nível não se sobreponham.
+ **Reserve espaço no buffer**: sempre aloque intervalos de CIDR maiores do que os necessários imediatamente para acomodar o crescimento.
+ **Documente a alocação de endereços IP**: mantenha a documentação da sua estratégia de alocação de endereços IP.

Considere as seguintes práticas recomendadas de implantação:
+ **Comece pela não produção**: implante primeiro em ambientes que não sejam de produção.
+ **Use o gerenciamento de estado do Terraform**: implemente armazenamento e bloqueio de estados remotos. Para obter mais informações, consulte [State storage and locking](https://developer.hashicorp.com/terraform/language/state/backends) na documentação do Terraform.
+ **Implemente o controle de versão**: controle a versão de todo o código do Terraform.
+ **Implemente a CI/CD integração** — use pipelines de integração contínua e entrega contínua (CI/CD) para implantações reproduzíveis.

Considere as seguintes práticas recomendadas operacionais:
+ **Habilite a importação automática**: configure um pool do Gerenciador de Endereços IP para descobrir e importar automaticamente os recursos existentes. Siga as instruções em [Editar um pool IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html) para ativar a importação automática.
+ **Monitore a utilização de endereços IP**: configure alarmes para os limites de utilização de endereços IP. Para obter mais informações, consulte [Monitorar IPAM com a Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html).
+ **Audite regularmente**: audite periodicamente o uso e a conformidade de endereços IP. Para obter mais informações, consulte [Rastrear uso de endereços IP no IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tracking-ip-addresses-ipam.html).
+ **Limpe as alocações não utilizadas**: libere as alocações de endereços IP quando os recursos forem desativados. Para obter mais informações, consulte [Desprovisionamento CIDRs de um pool](https://docs.aws.amazon.com/vpc/latest/ipam/depro-pool-cidr-ipam.html).

Considere as seguintes práticas recomendadas de segurança:
+ **Implemente o privilégio mínimo**: use perfis do IAM com as permissões mínimas necessárias. Para obter mais informações, consulte [Práticas recomendadas de segurança no IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) e [Gerenciamento de identidade e acesso no IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html).
+ **Use políticas de controle de serviço** — Implemente políticas de controle de serviço (SCPs) para impor o uso do IP Address Manager em sua organização. Para obter mais informações, consulte [Impor o uso do IPAM para criação de VPC](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) com. SCPs
+ **Controle o compartilhamento de recursos** — Gerencie cuidadosamente o escopo do compartilhamento de recursos do IP Address Manager em AWS RAM. Para obter mais informações, consulte [Compartilhar um pool IPAM usando AWS RAM](https://docs.aws.amazon.com/vpc/latest/ipam/share-pool-ipam.html).
+ **Imponha a marcação**: implemente a marcação obrigatória para todos os recursos relacionados ao Gerenciador de Endereços IP. Para obter mais informações, consulte *Estratégia de marcação* na seção [Informações adicionais](#multi-region-ipam-architecture-additional).

## Épicos
<a name="multi-region-ipam-architecture-epics"></a>

### Configurar uma conta de administrador delegado para o Gerenciador de endereços IP
<a name="set-up-a-delegated-administrator-account-for-ip-address-manager"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Ative AWS Organizations os recursos. | Certifique-se de que AWS Organizations todos os recursos estejam ativados. Para obter instruções, consulte [Habilitando todos os recursos de uma organização AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) na AWS Organizations documentação. | Administrador da AWS | 
| Ative o compartilhamento de recursos em AWS RAM. | Usando o AWS CLI, digite o seguinte comando para habilitar o compartilhamento de AWS RAM recursos para sua organização:<pre>aws ram enable-sharing-with-aws-organization</pre>Para obter mais informações, consulte [Habilitar o compartilhamento de recursos AWS Organizations](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs) na AWS RAM documentação. | Administrador da AWS | 
| Designe um administrador para o Gerenciador de Endereços IP. | Na conta de gerenciamento da organização, usando o AWS CLI, digite o seguinte comando, onde `123456789012` está o ID da conta que administrará o IP Address Manager:<pre>aws ec2 enable-ipam-organization-admin-account \<br />    --delegated-admin-account-id 123456789012</pre>Normalmente, uma conta de rede ou hub de rede é usado como administrador delegado do Gerenciador de endereços IP.Para obter mais informações, consulte [Integrar IPAM com contas em uma AWS organização](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html) na documentação do IP Address Manager. | Administrador da AWS | 

### Implante a infraestrutura
<a name="deploy-the-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Defina a arquitetura da rede. | Defina e documente sua arquitetura de rede, incluindo os intervalos de CIDR para regiões, unidades de negócios e ambientes. Para obter mais informações, consulte [Planejar o provisionamento de endereços IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html)na documentação do Gerenciador de endereços IP. | Engenheiro de rede | 
| Clonar o repositório. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | DevOps engenheiro | 
| Configure as variáveis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Engenheiro de rede, Terraform | 
| Implante os recursos do Gerenciador de Endereços IP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Terraform | 
| Valide a implantação. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | AWS geral, engenheiro de rede | 

### Crie VPCs e configure o monitoramento
<a name="create-vpcs-and-set-up-monitoring"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma VPC. | Siga as etapas em [Criar uma VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) na documentação da Amazon VPC. Ao chegar à etapa de escolher um intervalo CIDR para a VPC, aloque o próximo disponível de um de seus grupos regionais, de unidades de negócios e ambientes. | AWS geral, administrador de rede, engenheiro de rede | 
| Valide a alocação do intervalo CIDR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | AWS geral, administrador de rede, engenheiro de rede | 
| Monitore o Gerenciador de endereços IP. | Configure o monitoramento e os alarmes relacionados à alocação de recursos do Gerenciador de endereços IP. Para obter mais informações e instruções, consulte [Monitorar o IPAM com a Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html) e [monitorar o uso do CIDR por recurso](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) na documentação do IP Address Manager. | AWS geral | 
| Imponha o uso do Gerenciador de endereços IP. | Crie uma política de controle de serviço (SCP) AWS Organizations que exija que os membros da sua organização usem o IP Address Manager ao criar uma VPC. Para obter instruções, consulte [Impor o uso do IPAM para criação de VPC SCPs](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) na documentação do IP Address Manager. | AWS geral, administrador da AWS | 

## Solução de problemas
<a name="multi-region-ipam-architecture-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| O Terraform falha com o recurso Gerenciador de endereços IP não encontrado | Certifique-se de que a conta do administrador do IP Address Manager esteja devidamente delegada e que seu AWS provedor esteja autenticado nessa conta. | 
| A alocação do intervalo CIDR falha | Verifique se o intervalo CIDR solicitado se encaixa no intervalo disponível do pool do Gerenciador de endereços IP e não se sobrepõe às alocações existentes. | 
| AWS RAM problemas de compartilhamento | Verifique se o compartilhamento de recursos está habilitado para sua AWS organização. Verifique se o principal correto, o Amazon Resource Name (ARN) da organização, é usado no AWS RAM compartilhamento. | 
| Erros de validação de hierarquia de pools | Certifique-se de que os intervalos CIDR do pool secundário estejam adequadamente contidos nos intervalos CIDR do pool principal e não se sobreponham aos grupos irmãos. | 
| Limite de cota do Gerenciador de endereços IP excedido | Solicite um aumento de cota para pools do Gerenciador de endereços IP. Para obter mais informações, consulte [Solicitando um Aumento de Cota](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html) no * Guia do Usuário do Service Quotas*. | 

## Recursos relacionados
<a name="multi-region-ipam-architecture-resources"></a>

**AWS service (Serviço da AWS) documentação**
+ [Documentação do Gerenciador de endereços IP da Amazon VPC](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html)
+ [AWS Resource Access Manager documentação](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html)
+ [AWS Organizations documentação](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)

**AWS postagens no blog**
+ [Gerenciando pools de IP em todas VPCs as regiões usando o Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/networking-and-content-delivery/managing-ip-pools-across-vpcs-and-regions-using-amazon-vpc-ip-address-manager/)
+ [Network address management and auditing at scale with Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/aws/network-address-management-and-auditing-at-scale-with-amazon-vpc-ip-address-manager/)

**Vídeos e tutoriais**
+ [AWS re:Invent 2022: melhores práticas para design de Amazon VPC e IPAM (0) NET31](https://www.youtube.com/watch?v=XrEHsy_8RYs)
+ [AWS re:Invent 2022: design de VPC avançado e novos recursos (01) NET4](https://www.youtube.com/watch?v=tbXTVpwx87o)

## Mais informações
<a name="multi-region-ipam-architecture-additional"></a>

**Integração com o AFT**

Você pode integrar essa solução ao AWS Control Tower Account Factory for Terraform (AFT) para garantir que as contas recém-provisionadas recebam automaticamente as configurações de rede adequadas. Ao implantar essa solução IPAM em sua conta do hub de rede, novas contas criadas por meio do AFT podem fazer referência aos pools compartilhados do Gerenciador de Endereços IP quando você cria. VPCs

O exemplo de código a seguir demonstra a integração do AFT em uma personalização de conta usando o AWS Systems Manager Parameter Store:

```
# Get the IP Address Manager pool ID from Parameter Store
data "aws_ssm_parameter" "dev_ipam_pool_id" {
  name = "/org/network/ipam/finance/dev/pool-id"
}

# Create a VPC using the IP Address Manager pool
resource "aws_vpc" "this" {
  ipv4_ipam_pool_id   = data.aws_ssm_parameter.dev_ipam_pool_id.value
  ipv4_netmask_length = 24
  
  tags = {
    Name = "aft-account-vpc"
  }
}
```

**Estratégia de marcação**

A solução implementa uma estratégia abrangente de marcação para facilitar o gerenciamento de recursos. O exemplo de código a seguir demonstra como ele é usado:

```
# Example tag configuration
module "tags" {
  source = "./modules/tags"
  
  # Required tags
  product_name  = "enterprise-network"
  feature_name  = "ipam"
  org_id        = "finance"
  business_unit = "network-operations"
  owner         = "network-team"
  environment   = "prod"
  repo          = "https://github.com/myorg/ipam-terraform"
  branch        = "main"
  cost_center   = "123456"
  dr_tier       = "tier1"
  
  # Optional tags
  optional_tags = {
    "project"    = "network-modernization"
    "stack_role" = "infrastructure"
  }
}
```

Essas marcações são aplicadas automaticamente a todos os recursos do Gerenciador de endereços IP. Isso facilita a governança consistente, a alocação de custos e o gerenciamento de recursos.

# Personalize os CloudWatch alertas da Amazon para AWS Network Firewall
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall"></a>

*Jason Owens, Amazon Web Services*

## Resumo
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-summary"></a>

O padrão ajuda você a personalizar os CloudWatch alertas da Amazon que são gerados por AWS Network Firewall. Você poderá usar regras predefinidas ou criar regras personalizadas que determinam a mensagem, os metadados e a gravidade dos alertas. Em seguida, você pode agir de acordo com esses alertas ou automatizar as respostas de outros serviços da Amazon, como a Amazon EventBridge.

Nesse padrão, você gera regras de firewall compatíveis com o Suricata. O [Suricata](https://suricata.io/) é um mecanismo de detecção de ameaças de código aberto. Primeiro, você cria regras simples e depois as testa para confirmar se os CloudWatch alertas foram gerados e registrados. Depois de testar as regras com sucesso, você as modifica para definir mensagens, metadados e severidades personalizados e, em seguida, testa mais uma vez para confirmar as atualizações.

## Pré-requisitos e limitações
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ AWS Command Line Interface (AWS CLI) instalado e configurado em sua estação de trabalho Linux, macOS ou Windows. Para obter mais informações, consulte [Instalar ou atualizar a versão mais recente da AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ AWS Network Firewall instalado e configurado para usar o CloudWatch Logs. Para obter mais informações, consulte [Registrar tráfego de rede de AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html).
+ Uma instância do Amazon Elastic Compute Cloud (Amazon EC2) em uma sub-rede privada de uma nuvem privada virtual (VPC) protegida pelo Firewall de Rede.

**Versões do produto**
+ Para a versão 1 do AWS CLI, use 1.18.180 ou posterior. Para a versão 2 do AWS CLI, use 2.1.2 ou posterior.
+ O arquivo classification.config do Suricata versão 5.0.2. Para obter uma cópia desse arquivo de configuração, consulte a seção [Informações adicionais](#customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional).

## Arquitetura
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-architecture"></a>

![\[Uma solicitação de EC2 instância gera um alerta no Network Firewall, que encaminha o alerta para CloudWatch\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/da6087a9-e942-4cfe-85e3-3b08de6f3ba5/images/778d85cd-bc87-4ed0-a161-d35eb5daa694.png)


O diagrama da arquitetura mostra o seguinte fluxo de trabalho:

1. [Uma EC2 instância da Amazon em uma sub-rede privada faz uma solicitação usando [curl](https://curl.se/) ou Wget.](https://www.gnu.org/software/wget/)

1. O Network Firewall processa o tráfego e gera um alerta.

1. O Network Firewall envia os alertas registrados para o CloudWatch Logs.

## Ferramentas
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-tools"></a>

**Serviços da AWS**
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ajuda você a monitorar as métricas dos seus AWS recursos e dos aplicativos em que você executa AWS em tempo real.
+ O [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ajuda você a centralizar os registros de todos os seus sistemas e aplicativos, Serviços da AWS para que você possa monitorá-los e arquivá-los com segurança.
+ [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 Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html)é um serviço gerenciado e estável de firewall de rede e detecção e prevenção de intrusões para nuvens privadas virtuais (VPCs) no. Nuvem AWS 

**Outras ferramentas**
+ O [curl](https://curl.se/) é uma ferramenta de linha de comandos e biblioteca de código aberto.
+ O [GNU Wget](https://www.gnu.org/software/wget/) é uma ferramenta de linha de comandos gratuita.

## Épicos
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-epics"></a>

### Crie as regras de firewall e o grupo de regras
<a name="create-the-firewall-rules-and-rule-group"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar regras. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas da AWS, administrador de rede | 
| Criar o grupo de regras. | No AWS CLI, insira o seguinte comando. Isso cria o grupo de regras.<pre>❯ aws network-firewall create-rule-group \<br />        --rule-group-name custom --type STATEFUL \<br />        --capacity 10 --rules file://custom.rules \<br />        --tags Key=environment,Value=development</pre>Veja a seguir um exemplo de saída. Anote o `RuleGroupArn`, que você vai precisar em uma etapa posterior.<pre>{<br />    "UpdateToken": "4f998d72-973c-490a-bed2-fc3460547e23",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }</pre> | Administrador de sistemas AWS | 

### Atualizar a política de firewall
<a name="update-the-firewall-policy"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Obtenha o ARN da política de firewall. | No AWS CLI, insira o seguinte comando. Isto retorna o nome do recurso da Amazon (ARN) da política de firewall. Registre o ARN para uso mais tarde nesse padrão.<pre>❯ aws network-firewall describe-firewall \<br />    --firewall-name aws-network-firewall-anfw \<br />    --query 'Firewall.FirewallPolicyArn'</pre>Veja o seguinte exemplo de ARN retornado por esse comando.<pre>"arn:aws:network-firewall:us-east-2:1234567890:firewall-policy/firewall-policy-anfw"</pre> | Administrador de sistemas AWS | 
| Atualizar a política de firewall. | No editor de texto, copie e cole o código a seguir. Substitua `<RuleGroupArn>` pelo valor que você registrou no épico anterior. Salve o arquivo como `firewall-policy-anfw.json`.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "<RuleGroupArn>"<br />        }<br />    ]<br />}</pre>Digite o comando apresentado a seguir na AWS CLI. Esse comando requer um [token de atualização](https://docs.aws.amazon.com/cli/latest/reference/network-firewall/update-firewall-policy.html) para adicionar as novas regras. O token é usado para confirmar que a política não foi alterada desde a última vez que você a recuperou.<pre>UPDATETOKEN=(`aws network-firewall describe-firewall-policy \<br />              --firewall-policy-name firewall-policy-anfw \<br />              --output text --query UpdateToken`)<br /> <br /> aws network-firewall update-firewall-policy \<br /> --update-token $UPDATETOKEN \<br /> --firewall-policy-name firewall-policy-anfw \<br /> --firewall-policy file://firewall-policy-anfw.json</pre> | Administrador de sistemas AWS | 
| Confirme as atualizações da política. | (Opcional) Se você desejar confirmar que as regras foram adicionadas e visualizar o formato da política, execute o comando apresentado a seguir na AWS CLI.<pre>❯ aws network-firewall describe-firewall-policy \<br />  --firewall-policy-name firewall-policy-anfw \<br />  --query FirewallPolicy</pre>Veja a seguir um exemplo de saída.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom"<br />        }<br />    ]<br />}</pre> | Administrador de sistemas AWS | 

### Testar a funcionalidade do alerta
<a name="test-alert-functionality"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Gere alertas para testes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas AWS | 
| Valide se os alertas estão registrados. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas AWS | 

### Atualize as regras de firewall e o grupo de regras
<a name="update-the-firewall-rules-and-rule-group"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize as regras do firewall. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas AWS | 
| Atualizar o grupo de regras. | No AWS CLI, execute os seguintes comandos. Use o ARN da sua política de firewall. Esses comandos obtêm um token de atualização e atualizam o grupo de regras com as alterações da regra.<pre>❯ UPDATETOKEN=(`aws network-firewall \<br />                describe-rule-group \<br />--rule-group-arn arn:aws:network-firewall:us-east-2:123457890:stateful-rulegroup/custom \<br />--output text --query UpdateToken`)</pre><pre> ❯ aws network-firewall update-rule-group \<br />  --rule-group-arn arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom \<br />--rules file://custom.rules \<br />--update-token $UPDATETOKEN</pre>Veja a seguir um exemplo de saída.<pre>{<br />    "UpdateToken": "7536939f-6a1d-414c-96d1-bb28110996ed",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }<br />}</pre> | Administrador de sistemas AWS | 

### Testar a funcionalidade de alerta atualizada
<a name="test-the-updated-alert-functionality"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Gere um alerta para testes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas AWS | 
| Valide o alerta alterado. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrador de sistemas AWS | 

## Recursos relacionados
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-resources"></a>

**Referências**
+ [Envie alertas AWS Network Firewall para um canal do Slack](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/send-alerts-from-aws-network-firewall-to-a-slack-channel.html) (orientação AWS prescritiva)
+ [Aumentando a prevenção de ameaças AWS com Suricata (AWS postagem no](https://aws.amazon.com/blogs/opensource/scaling-threat-prevention-on-aws-with-suricata/) blog)
+ [Modelos de implantação para AWS Network Firewall](https://aws.amazon.com/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/) (postagem AWS no blog)
+ [Meta-chaves do Suricata](https://suricata.readthedocs.io/en/suricata-6.0.1/rules/meta.html)(Documentação do Suricata) 

**Tutoriais e vídeos**
+ [AWS Network Firewall oficina](https://networkfirewall.workshop.aws/)

## Mais informações
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional"></a>

Veja a seguir o arquivo de configuração de classificação do Suricata 5.0.2. Essas classificações são usadas ao criar as regras de firewall.

```
# config classification:shortname,short description,priority
 
config classification: not-suspicious,Not Suspicious Traffic,3
config classification: unknown,Unknown Traffic,3
config classification: bad-unknown,Potentially Bad Traffic, 2
config classification: attempted-recon,Attempted Information Leak,2
config classification: successful-recon-limited,Information Leak,2
config classification: successful-recon-largescale,Large Scale Information Leak,2
config classification: attempted-dos,Attempted Denial of Service,2
config classification: successful-dos,Denial of Service,2
config classification: attempted-user,Attempted User Privilege Gain,1
config classification: unsuccessful-user,Unsuccessful User Privilege Gain,1
config classification: successful-user,Successful User Privilege Gain,1
config classification: attempted-admin,Attempted Administrator Privilege Gain,1
config classification: successful-admin,Successful Administrator Privilege Gain,1
 
# NEW CLASSIFICATIONS
config classification: rpc-portmap-decode,Decode of an RPC Query,2
config classification: shellcode-detect,Executable code was detected,1
config classification: string-detect,A suspicious string was detected,3
config classification: suspicious-filename-detect,A suspicious filename was detected,2
config classification: suspicious-login,An attempted login using a suspicious username was detected,2
config classification: system-call-detect,A system call was detected,2
config classification: tcp-connection,A TCP connection was detected,4
config classification: trojan-activity,A Network Trojan was detected, 1
config classification: unusual-client-port-connection,A client was using an unusual port,2
config classification: network-scan,Detection of a Network Scan,3
config classification: denial-of-service,Detection of a Denial of Service Attack,2
config classification: non-standard-protocol,Detection of a non-standard protocol or event,2
config classification: protocol-command-decode,Generic Protocol Command Decode,3
config classification: web-application-activity,access to a potentially vulnerable web application,2
config classification: web-application-attack,Web Application Attack,1
config classification: misc-activity,Misc activity,3
config classification: misc-attack,Misc Attack,2
config classification: icmp-event,Generic ICMP event,3
config classification: inappropriate-content,Inappropriate Content was Detected,1
config classification: policy-violation,Potential Corporate Privacy Violation,1
config classification: default-login-attempt,Attempt to login by a default username and password,2
 
# Update
config classification: targeted-activity,Targeted Malicious Activity was Detected,1
config classification: exploit-kit,Exploit Kit Activity Detected,1
config classification: external-ip-check,Device Retrieving External IP Address Detected,2
config classification: domain-c2,Domain Observed Used for C2 Detected,1
config classification: pup-activity,Possibly Unwanted Program Detected,2
config classification: credential-theft,Successful Credential Theft Detected,1
config classification: social-engineering,Possible Social Engineering Attempted,2
config classification: coin-mining,Crypto Currency Mining Activity Detected,2
config classification: command-and-control,Malware Command and Control Activity Detected,1
```

# Implante recursos em uma AWS Wavelength zona usando o Terraform
<a name="deploy-resources-wavelength-zone-using-terraform"></a>

*Zahoor Chaudhrey e Luca Iannario, Amazon Web Services*

## Resumo
<a name="deploy-resources-wavelength-zone-using-terraform-summary"></a>

O [AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html) permite criar infraestrutura otimizada para aplicações de Multi-Access Edge Computing (MEC). AWS As zonas *de Wavelength* são implantações de infraestrutura que AWS incorporam serviços de computação e armazenamento nas redes 5G dos provedores de serviços de comunicação (CSP). O tráfego de aplicações de dispositivos 5G chega aos servidores de aplicação executando nas zonas do Wavelength sem sair da rede de telecomunicações. Os seguintes elementos facilitam a conectividade de rede por meio do Wavelength:
+ **Nuvens privadas virtuais (VPCs)** — VPCs em uma Conta da AWS podem se estender para abranger várias zonas de disponibilidade, incluindo zonas de comprimento de onda. As instâncias do Amazon Elastic Compute Cloud (Amazon EC2) e os serviços relacionados aparecem como parte da sua VPC regional. VPCs são criados e gerenciados na [Amazon Virtual Private Cloud (Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)).
+ **Gateway** da operadora — Um gateway da operadora permite a conectividade da sub-rede na Wavelength Zone à rede do CSP, à Internet ou por meio da rede Região da AWS do CSP. O gateway da operadora cumpre dois propósitos. Ele permite o tráfego de entrada proveniente de uma rede de CSP em um local específico e também permite o tráfego de saída para a rede de telecomunicações e para a internet.

Esse padrão e o código Terraform associado ajudam você a lançar recursos, como EC2 instâncias da Amazon, volumes do Amazon Elastic Block Store (Amazon EBS), sub-redes e um gateway de operadora VPCs, em uma zona de Wavelength.

## Pré-requisitos e limitações
<a name="deploy-resources-wavelength-zone-using-terraform-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS
+ Um ambiente de desenvolvimento integrado (IDE)
+ [Opte por usar](https://docs.aws.amazon.com/wavelength/latest/developerguide/get-started-wavelength.html#enable-zone-group) a zona do Wavelength de destino
+ AWS Command Line Interface (AWS CLI), [instalado](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Terraform, na versão 1.8.4 ou em versões posteriores, [instalado](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) (documentação do Terraform)
+ Terraform AWS Provider versão 5.32.1 ou posterior, [configurada](https://hashicorp.github.io/terraform-provider-aws/) (documentação do Terraform)
+ Git, [instalado](https://github.com/git-guides/install-git) () GitHub
+ [Permissões](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) para criar recursos Amazon VPC, Wavelength e Amazon EC2 

**Limitações**

Nem todos são Regiões da AWS compatíveis com zonas de Wavelength. Para obter mais informações, consulte [Zonas do Wavelength disponíveis](https://docs.aws.amazon.com/wavelength/latest/developerguide/available-wavelength-zones.html) na documentação do Wavelength.

## Arquitetura
<a name="deploy-resources-wavelength-zone-using-terraform-architecture"></a>

O diagrama a seguir mostra como você pode criar uma sub-rede e AWS recursos em uma zona de Wavelength. VPCs que contêm uma sub-rede em uma zona de Wavelength podem se conectar a um gateway de operadora. Um gateway da operadora permite a conexão com os seguintes recursos:
+ Dispositivos 4G/LTE e 5G na rede da operadora de telecomunicações.
+ Acesso fixo sem fio para parceiros selecionados da zona do Wavelength. Para obter mais informações, consulte [Acesso AWS Wavelength múltiplo](https://docs.aws.amazon.com/wavelength/latest/developerguide/multi-access.html).
+ Tráfego de saída para recursos públicos da internet.

![\[Um gateway da operadora estabelece a conexão entre os recursos da AWS na zona do Wavelength e a rede do CSP.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/8c507de1-208c-4563-bb58-52388ab2fa6d/images/a4cc0699-0cbc-4f15-ab14-3ae569ced7f4.png)


## Ferramentas
<a name="deploy-resources-wavelength-zone-using-terraform-tools"></a>

**Serviços da AWS**
+ [A Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.
+ [AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)estende a Nuvem AWS infraestrutura às redes 5G dos provedores de telecomunicações. Dessa forma, você pode desenvolver aplicações que proporcionam latências extremamente baixas para dispositivos móveis e usuários finais.

**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**

O código desse padrão está disponível no repositório GitHub [Criando AWS Wavelength infraestrutura usando o Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure). O código Terraform implanta a seguinte infraestrutura e os seguintes recursos:
+ Uma VPC
+ Uma zona do Wavelength
+ Uma sub-rede pública na zona do Wavelength
+ Um gateway da operadora na zona do Wavelength
+ Uma EC2 instância da Amazon na Wavelength Zone

## Práticas recomendadas
<a name="deploy-resources-wavelength-zone-using-terraform-best-practices"></a>
+ Antes de realizar a implantação, confirme que está usando as versões mais recentes do Terraform e da AWS CLI.
+ Use um pipeline de integração contínua e entrega contínua (CI/CD) para implantar a IaC. Para obter mais informações, consulte [Práticas recomendadas para gerenciar arquivos de estado do Terraform no AWS CI/CD Pipeline](https://aws.amazon.com/blogs/devops/best-practices-for-managing-terraform-state-files-in-aws-ci-cd-pipeline/) em blogs. AWS 

## Épicos
<a name="deploy-resources-wavelength-zone-using-terraform-epics"></a>

### Provisionar a infraestrutura
<a name="provision-the-infrastructure"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Insira o comando a seguir para clonar o repositório [Creating AWS Wavelength Infrastructure using Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure) em seu ambiente.`git clone git@github.com:aws-samples/terraform-wavelength-infrastructure.git` | DevOps engenheiro | 
| Atualize as variáveis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps engenheiro, Terraform | 
| Inicialize a configuração. | Insira o seguinte comando para inicializar o diretório de trabalho:<pre>terraform init</pre> | DevOps engenheiro, Terraform | 
| Visualize o plano do Terraform. | Digite o comando a seguir para comparar o estado de destino com o estado atual do seu AWS ambiente. Esse comando gera uma visualização prévia dos recursos que serão configurados.<pre>terraform plan</pre> | DevOps engenheiro, Terraform | 
| Verifique e implante. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps engenheiro, Terraform | 

### Validar e limpar
<a name="validate-and-clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique a implantação da infraestrutura. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | AWS DevOps, DevOps engenheiro | 
| (Opcional) Limpe a infraestrutura. | Se você precisar excluir todos os recursos que foram provisionados pelo Terraform, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps engenheiro, Terraform | 

## Solução de problemas
<a name="deploy-resources-wavelength-zone-using-terraform-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Conectividade com EC2 instâncias da Amazon no Região da AWS. | Consulte [Solucionar problemas de conexão com a instância do Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html) ou [Solucionar problemas de conexão com a instância do Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/troubleshooting-windows-instances.html). | 
| Conectividade com EC2 instâncias da Amazon na Wavelength Zone. | Consulte [Solucionar problemas de conectividade SSH ou RDP com minhas EC2 instâncias lançadas em uma zona de Wavelength](https://repost.aws/knowledge-center/ec2-wavelength-zone-connection-errors). | 
| Capacidade na zona do Wavelength. | Consulte [Cotas e considerações para as zonas do Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/wavelength-quotas.html). | 
| Conectividade móvel ou de operadora da rede da operadora para a Região da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | 

## Recursos relacionados
<a name="deploy-resources-wavelength-zone-using-terraform-resources"></a>
+ [O que é AWS Wavelength?](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)
+ [Como AWS Wavelength funciona](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html)
+ [Resiliência em AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/disaster-recovery-resiliency.html)

# Migre registros de DNS em massa para uma zona hospedada privada do Amazon Route 53
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

## Resumo
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

Engenheiros de rede e administradores de nuvem precisam de uma maneira eficiente e simples de adicionar registros do Sistema de Nomes de Domínio (DNS) às zonas hospedadas privadas no Amazon Route 53. Usar uma abordagem manual para copiar entradas de uma planilha do Microsoft Excel para locais apropriados no console do Route 53 é entediante e propenso a erros. Esse padrão descreve uma abordagem automatizada que reduz o tempo e o esforço necessários para adicionar vários registros. Ele também fornece um conjunto repetível de etapas para a criação de várias zonas hospedadas.

Este padrão usa o Amazon Simple Storage Service (Amazon S3) para armazenar registros. Para trabalhar com dados de forma eficiente, o padrão usa o formato JSON devido à sua simplicidade e à capacidade de oferecer suporte a um dicionário Python (tipo de dados `dict`).

**nota**  
Caso seja possível gerar um arquivo de zona no seu sistema, considere usar o [recurso de importação do Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html).

## Pré-requisitos e limitações
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**Pré-requisitos **
+ Uma planilha do Excel que contém registros de zona hospedada privada
+ [Familiaridade com diferentes tipos de registros DNS, como registro A, registro Ponteiro de autoridade de nome (NAPTR - Name Authority Pointer record) e registro SRV (consulte Tipos de registro DNS suportados)](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html)
+ Familiaridade com a linguagem Python e suas bibliotecas

**Limitações**
+ O padrão não oferece cobertura abrangente para todos os cenários de casos de uso. Por exemplo, a chamada [change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) não usa todas as propriedades disponíveis da API.
+ Na planilha do Excel, o valor em cada linha é considerado exclusivo. Espera-se que vários valores para cada nome de domínio totalmente qualificado (FQDN - fully qualified domain name) apareçam na mesma linha. Se isso não for verdade, você deve modificar o código fornecido nesse padrão para realizar a concatenação necessária.
+ O padrão usa o AWS SDK para Python (Boto3) para chamar diretamente o serviço Route 53. Você pode aprimorar o código para usar um CloudFormation wrapper da AWS para os `update_stack` comandos `create_stack` and e usar os valores JSON para preencher os recursos do modelo.

## Arquitetura
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>

**Pilha de tecnologia**
+ Zonas hospedadas privadas do Route 53 para roteamento de tráfego
+ Amazon S3 para armazenar o arquivo JSON de saída

![\[Fluxo de trabalho para migrar registros de DNS em massa para uma zona hospedada privada do Route 53.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


O fluxo de trabalho consiste nessas etapas, conforme ilustrado no diagrama anterior e discutido na seção *Épicos*:

1. Faça upload de uma planilha do Excel que tenha as informações do conjunto de registros em um bucket do S3.

1. Crie e execute um script Python que converta os dados do Excel para o formato JSON.

1. Leia os registros do bucket do S3 e limpe os dados.

1. Crie conjuntos de registros em sua zona hospedada privada.

## Ferramentas
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html): o Amazon Route 53 é um serviço web de DNS altamente disponível e escalável que gerencia registro de domínios, roteamento de DNS e verificação de integridade.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html): o Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos. Você pode utilizar o Amazon S3 para armazenar e recuperar qualquer volume de dados, a qualquer momento, de qualquer lugar na web.

## Épicos
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### Prepare dados para automação
<a name="prepare-data-for-automation"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie um arquivo Excel para seus registros. | Use os registros que você exportou do seu sistema atual para criar uma planilha do Excel que tenha as colunas necessárias para um registro, como nome de domínio totalmente qualificado (FQDN), tipo de registro, tempo de vida (TTL) e valor. Para registros NAPTR e SRV, o valor é uma combinação de várias propriedades, então use o método `concat` do Excel para combinar essas propriedades.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Engenheiro de dados, habilidades em Excel | 
| Verifique o ambiente de trabalho. | No seu IDE, crie um arquivo em Python para converter a planilha de entrada do Excel para o formato JSON. (Em vez de um IDE, você também pode usar um SageMaker notebook da Amazon para trabalhar com código Python.)Verifique se a versão do Python que você está usando é a versão 3.7 ou superior.<pre> python3 --version</pre>Instale o pacote do **pandas**.<pre> pip3 install pandas --user</pre> | AWS geral | 
| Converta os dados da planilha do Excel em JSON. | Crie um arquivo Python que contenha o código a seguir para converter do Excel para JSON.<pre>import pandas as pd<br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>onde `Book1` é o nome da planilha do Excel e `my.json` é o nome do arquivo JSON de saída. | Engenheiro de dados, habilidades em Python | 
| Faça upload do arquivo JSON em um bucket do S3. | Faça upload do arquivo `my.json` em um bucket do S3. Para obter mais informações, consulte [Criar um bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) na documentação do Amazon S3. | Desenvolvedor de aplicativos | 
| FqdnName | RecordType | Valor | TTL | 
| something.example.org | A | 1.1.1.1 | 900 | 

### Inserir registros
<a name="insert-records"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma zona hospedada privada. | Use a API [create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) e o código de exemplo do Python a seguir para criar uma zona hospedada privada. Substitua os valores dos parâmetros `hostedZoneName`, `vpcRegion`, e `vpcId` pelos seus próprios valores.<pre>import boto3<br />import random<br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion: vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /> print(response)</pre>Você também pode usar uma ferramenta de infraestrutura como código (IaC), como CloudFormation a AWS, para substituir essas etapas por um modelo que cria uma pilha com os recursos e propriedades apropriados. | Arquiteto de nuvem, administrador de rede, habilidades em Python | 
| Recupere detalhes como um dicionário do Amazon S3. | Use o código a seguir para ler do bucket do S3 e obter os valores JSON como um dicionário Python. <pre>fileobj = s3_client.get_object(<br />        Bucket=bucket_name,<br />        Key='my.json'<br />        )<br />    filedata = fileobj['Body'].read()<br />    contents = filedata.decode('utf-8')<br />    json_content=json.loads(contents)<br />    print(json_content)</pre>onde `json_content` contém o dicionário Python. | Desenvolvedor de aplicativos, habilidades em Python | 
| Limpe os valores de dados para espaços e caracteres Unicode. | Como medida de segurança para garantir a exatidão dos dados, use o código a seguir para realizar uma operação de separação dos valores em `json_content`. Esse código remove os caracteres de espaço na frente e no final de cada string. Ele também usa o método `replace` para remover espaços rígidos (não quebráveis) (os caracteres `\xa0`).<pre>for item in json_content:<br />    fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip())<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {<br />                 'Value': item["Value"].replace('\xa0', '').strip()<br />                }</pre> | Desenvolvedor de aplicativos, habilidades em Python | 
| Inserir registros. | Use o código a seguir como parte do loop `for` anterior.<pre>change_response = route53_client.change_resource_record_sets(<br />            HostedZoneId="xxxxxxxx",<br />            ChangeBatch={<br />                'Comment': 'Created by automation',<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': fqn_name,<br />                            'Type': rec_type,<br />                            'TTL': item["TTL"],<br />                            'ResourceRecords': res_rec<br />                        }<br />                    }<br />                ]<br />            }<br />    )</pre>Onde `xxxxxxx` está o ID da zona hospedada desde a primeira etapa desse épico. | Desenvolvedor de aplicativos, habilidades em Python | 

## Recursos relacionados
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**Referências**
+ [Criação de registros importando um arquivo de zona](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (documentação do Amazon Route 53)
+ [método create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) (documentação do Boto3)
+ [método change\$1resource\$1record\$1sets (documentação do Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets))

**Tutoriais e vídeos**
+ [Tutorial do Python](https://docs.python.org/3/tutorial/) (documentação do Python)
+ [Design de DNS usando o Amazon Route 53](https://www.youtube.com/watch?v=2y_RBjDkRgY) (YouTube vídeo, *AWS Online Tech Talks*)

# Modifique os cabeçalhos HTTP ao migrar de F5 para um Application Load Balancer na AWS
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws"></a>

*Sachin Trivedi, Amazon Web Services*

## Resumo
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-summary"></a>

Quando você migra um aplicativo que usa um balanceador de carga F5 para a Amazon Web Services (AWS) e deseja usar um Application Load Balancer na AWS, migrar regras F5 para modificações de cabeçalho é um problema comum. Um Application Load Balancer não suporta modificações de cabeçalhos, mas você pode usar a Amazon CloudFront como uma rede de distribuição de conteúdo (CDN) e o Lambda @Edge para modificar cabeçalhos.

Esse padrão descreve as integrações necessárias e fornece um exemplo de código para modificação do cabeçalho usando a AWS CloudFront e o Lambda @Edge.

## Pré-requisitos e limitações
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-prereqs"></a>

**Pré-requisitos **
+ Um aplicativo on-premises que usa um balanceador de carga F5 com uma configuração que substitui o valor do cabeçalho HTTP usando `if, else`. Para obter mais informações sobre essa configuração, consulte [HTTP::header](https://clouddocs.f5.com/api/irules/HTTP__header.html) na documentação do produto F5. 

**Limitações**
+ Esse padrão se aplica à personalização do cabeçalho do balanceador de carga F5. Para outros balanceadores de carga de terceiros, confira a documentação do balanceador de carga para obter informações de suporte.
+ As funções do Lambda que você usa no Lambda@Edge devem estar na região Leste dos EUA (Norte da Virgínia).

## Arquitetura
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-architecture"></a>

O diagrama a seguir mostra a arquitetura na AWS, incluindo o fluxo de integração entre a CDN e outros componentes da AWS.

![\[Arquitetura para modificação de cabeçalho usando Amazon CloudFront e Lambda @Edge\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/00abbe3c-2453-4291-9b24-b488dced4868/images/4ee9a19e-6da2-4c5a-a8bc-19d3918a166e.png)


## Ferramentas
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-tools"></a>

**Serviços da AWS**
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) ─  Um Application Load Balancer é um serviço de balanceamento de carga totalmente gerenciado pela AWS que funciona na sétima camada do modelo Open Systems Interconnection (OSI). Ele equilibra o tráfego em vários destinos e oferece suporte a solicitações de roteamento avançado com base em cabeçalhos e métodos HTTP, strings de consulta e roteamento baseado em host ou em caminho.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) — CloudFront A Amazon é um serviço web que acelera a distribuição de seu conteúdo web estático e dinâmico, como .html, .css, .js e arquivos de imagem, para seus usuários. CloudFront entrega seu conteúdo por meio de uma rede mundial de data centers chamados de pontos de presença para menor latência e melhor desempenho.
+ O [Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html) ─ Lambda @Edge é uma extensão do AWS Lambda que permite executar funções para personalizar o conteúdo que é entregue. CloudFront Você pode criar funções na região Leste dos EUA (Norte da Virgínia) e depois associar a função a uma CloudFront distribuição para replicar automaticamente seu código em todo o mundo, sem provisionar ou gerenciar servidores. Isso reduz a latência e melhora a experiência do usuário.

**Código **

O código de exemplo a seguir fornece um plano para modificar os cabeçalhos de CloudFront resposta. Siga as instruções na seção *Épicos* para implantar o código.

```
exports.handler = async (event, context) => {
    const response = event.Records[0].cf.response;
    const headers = response.headers;


    const headerNameSrc = 'content-security-policy';
    const headerNameValue = '*.xyz.com';


    if (headers[headerNameSrc.toLowerCase()]) {
        headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
        }];
        console.log(`Response header "${headerNameSrc}" was set to ` +
                    `"${headers[headerNameSrc.toLowerCase()][0].value}"`);
    }
    else {
            headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
            }];
    }
    return response;
};
```

## Épicos
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-epics"></a>

### Criar uma distribuição CDN
<a name="create-a-cdn-distribution"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma distribuição CloudFront na web.  | Nesta etapa, você cria uma CloudFront distribuição para informar de CloudFront onde deseja que o conteúdo seja entregue e os detalhes sobre como rastrear e gerenciar a entrega de conteúdo.Para criar uma distribuição usando o console, faça login no AWS Management Console, abra o [CloudFront console](https://console.aws.amazon.com/cloudfront/v3/home) e siga as etapas na [CloudFront documentação](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html). | Administrador de nuvem | 

### Criar e implantar as funções do Lambda@Edge
<a name="create-and-deploy-the-lambda-edge-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie e implante uma função do Lambda@Edge. | Você pode criar uma função Lambda @Edge usando um esquema para modificar CloudFront cabeçalhos de resposta. (Outros BluePrints estão disponíveis para diferentes casos de uso; para obter mais informações, consulte [exemplos de funções do Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) CloudFront na documentação.) Para criar uma função Lambda@Edge:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.html) | Administrador da AWS | 
| Implante a função do Lambda@Edge. | Siga as instruções na [etapa 4](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html#lambda-edge-how-it-works-tutorial-add-trigger) do *tutorial: Criação de uma função simples do Lambda @Edge* na CloudFront documentação da Amazon para configurar o CloudFront gatilho e implantar a função. | Administrador da AWS | 

## Recursos relacionados
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-resources"></a>

**CloudFront documentação**
+ [Comportamento de solicitações e respostas para origens personalizadas](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html) 
+ [Trabalhar com distribuições](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html) 
+ [Funções de exemplo do Lambda@Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) 
+ [Personalizar o conteúdo na borda com o Lambda@Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html)
+ [Tutorial: criação de uma função do Lambda@Edge simples](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html)

# Crie um relatório das descobertas do Network Access Analyzer para acesso de entrada à Internet em vários Contas da AWS
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts"></a>

*Mike Virgilio, Amazon Web Services*

## Resumo
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-summary"></a>

O acesso não intencional de entrada aos AWS recursos pela Internet pode representar riscos para o perímetro de dados de uma organização. O [Analisador de Acesso à Rede](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html) é um recurso da Amazon Virtual Private Cloud (Amazon VPC) que ajuda você a identificar o acesso não intencional à rede a seus recursos na Amazon Web Services (AWS). Você pode usar o Analisador de Acesso à Rede para especificar seus requisitos de acesso à rede e identificar possíveis caminhos de rede que não atendam aos requisitos especificados. Você pode usar o Analisador de Acesso à Rede para fazer o seguinte:

1. Identifique AWS recursos acessíveis à Internet por meio de gateways da Internet.

1. Valide se suas nuvens privadas virtuais (VPCs) estão segmentadas adequadamente, como isolar ambientes de produção e desenvolvimento e separar cargas de trabalho transacionais.

O Network Access Analyzer analisa as condições de acessibilidade end-to-end da rede e não apenas um único componente. Para determinar se um recurso é acessível pela Internet, o Network Access Analyzer avalia o gateway da Internet, as tabelas de rotas da VPC, as listas de controle de acesso à rede (ACLs), os endereços IP públicos em interfaces de rede elásticas e os grupos de segurança. Se algum desses componentes impedir o acesso à Internet, o Analisador de Acesso à Rede não gerará uma descoberta. Por exemplo, se uma instância do Amazon Elastic Compute Cloud (Amazon EC2) tiver um grupo de segurança aberto que permite o tráfego, `0/0` mas a instância está em uma sub-rede privada que não é roteável de nenhum gateway da Internet, o Network Access Analyzer não geraria uma descoberta. Isso fornece resultados de alta fidelidade para que você possa identificar recursos que são realmente acessíveis pela Internet.

Ao executar o Analisador de Acesso à Rede, você usa os [Network Access Scopes](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html#concepts) para especificar seus requisitos de acesso à rede. Essa solução identifica caminhos de rede entre um gateway da Internet e uma interface de rede elástica. Nesse padrão, você implanta a solução de forma centralizada Conta da AWS em sua organização, gerenciada por AWS Organizations, e ela analisa todas as contas, em qualquer uma Região da AWS, na organização.

Essa solução foi projetada com o seguinte em mente:
+ Os AWS CloudFormation modelos reduzem o esforço necessário para implantar os AWS recursos nesse padrão.
+ Você pode ajustar os parâmetros nos CloudFormation modelos e no script **naa-script.sh** no momento da implantação para personalizá-los para seu ambiente.
+ O script Bash provisiona e analisa automaticamente os escopos de acesso à rede para várias contas, em paralelo.
+ Um script Python processa as descobertas, extrai os dados e consolida os resultados. Você pode optar por revisar o relatório consolidado das descobertas do Analisador de Acesso à Rede no formato CSV ou no AWS Security Hub CSPM. Um exemplo do relatório CSV está disponível na seção [Informações adicionais](#create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional) desse padrão.
+ Você pode corrigir as descobertas ou excluí-las de futuras análises adicionando-as ao arquivo **naa-exclusions.csv**.

## Pré-requisitos e limitações
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-prereqs"></a>

**Pré-requisitos **
+ E Conta da AWS para hospedar serviços e ferramentas de segurança, gerenciados como uma conta membro de uma organização em AWS Organizations. Nesse padrão, essa conta é chamada de conta de segurança.
+ Na conta de segurança, você deve ter uma sub-rede privada com acesso de saída à Internet. Para obter instruções, consulte [Criar uma sub-rede](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html) na documentação da Amazon VPC. Você pode estabelecer acesso à Internet usando um [gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) ou um [endpoint da VPC de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html).
+ Acesso à conta AWS Organizations de gerenciamento ou a uma conta que tenha delegado permissões de administrador para CloudFormation. Para obter instruções, consulte [Registrar um administrador delegado](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) na CloudFormation documentação.
+ Habilite o acesso confiável entre AWS Organizations CloudFormation e. Para obter instruções, consulte [Habilitar acesso confiável com AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) na CloudFormation documentação.
+ Se você estiver fazendo o upload das descobertas para o CSPM do Security Hub, o CSPM do Security Hub deve estar habilitado na conta e onde a instância Região da AWS da Amazon está provisionada. EC2 Para obter mais informações, consulte [Configurar AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html).

**Limitações**
+ Atualmente, os caminhos de rede entre contas não são analisados devido às limitações do atributo Analisador de Acesso à Rede.
+ O alvo Contas da AWS deve ser gerenciado como uma organização em AWS Organizations. **Se você não estiver usando AWS Organizations, você pode atualizar o CloudFormation modelo **naa-execrole.yaml** e o script naa-script.sh para seu ambiente.** Em vez disso, você fornece uma lista Conta da AWS IDs e regiões nas quais deseja executar o script.
+ O CloudFormation modelo foi projetado para implantar a EC2 instância da Amazon em uma sub-rede privada com acesso de saída à Internet. O AWS Systems Manager Agente (Agente SSM) requer acesso de saída para alcançar o endpoint do serviço Systems Manager, e você precisa de acesso de saída para clonar o repositório de código e instalar dependências. Se quiser usar uma sub-rede pública, você deve modificar o modelo **naa-resources.yaml** para associar um [endereço IP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) elástico à instância da Amazon. EC2 

## Arquitetura
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-architecture"></a>

**Arquitetura de destino**

*Opção 1: acessar as descobertas em um bucket do Amazon S3*

![\[Diagrama de arquitetura de acesso ao relatório de resultados do Analisador de Acesso à Rede em um bucket do Amazon S3\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/d0b08437-e5b0-47a1-abdd-040c67b5da8f.png)


O diagrama mostra o seguinte processo:

1. Se você estiver executando manualmente a solução, o usuário se autentica na EC2 instância da Amazon usando o Gerenciador de Sessões e, em seguida, executa o script **naa-script.sh**. Esse script de shell executa as etapas de 2 a 7.

   Se você estiver executando a solução automaticamente, o script **naa-script.sh** será iniciado automaticamente na programação que você definiu na expressão cron. Esse script de shell executa as etapas de 2 a 7. Para obter mais informações, consulte *Automação e escala* no fim desta seção.

1. A EC2 instância da Amazon baixa o arquivo **naa-exception.csv** mais recente do bucket do Amazon S3. Esse arquivo é usado posteriormente no processo, quando o script Python processa as exclusões.

1. A EC2 instância da Amazon assume a função `NAAEC2Role` AWS Identity and Access Management (IAM), que concede permissões para acessar o bucket do Amazon S3 e assumir `NAAExecRole` as funções do IAM nas outras contas da organização.

1. A EC2 instância da Amazon assume a função `NAAExecRole` do IAM na conta de gerenciamento da organização e gera uma lista das contas na organização.

1. A EC2 instância da Amazon assume a função do `NAAExecRole` IAM nas contas dos membros da organização (chamadas de contas de *carga de trabalho no diagrama de arquitetura) e realiza uma avaliação de segurança em cada conta*. As descobertas são armazenadas como arquivos JSON na EC2 instância da Amazon.

1. A EC2 instância da Amazon usa um script Python para processar os arquivos JSON, extrair os campos de dados e criar um relatório CSV.

1. A EC2 instância da Amazon carrega o arquivo CSV no bucket do Amazon S3.

1. Uma EventBridge regra da Amazon detecta o upload do arquivo e usa um tópico do Amazon SNS para enviar um e-mail notificando o usuário de que o relatório foi concluído.

1. O usuário baixa o arquivo CSV do bucket do Amazon S3. O usuário importa os resultados para o modelo do Excel e revisa os resultados.

*Opção 2: Acesse os resultados em AWS Security Hub CSPM*

![\[Diagrama de arquitetura de acesso às descobertas do Analisador de Acesso à Rede por meio do AWS Security Hub\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/9cb4f059-dfb6-4a33-9f8d-159fe5df0d64.png)


O diagrama mostra o seguinte processo:

1. Se você estiver executando manualmente a solução, o usuário se autentica na EC2 instância da Amazon usando o Gerenciador de Sessões e, em seguida, executa o script **naa-script.sh**. Esse script de shell executa as etapas de 2 a 7.

   Se você estiver executando a solução automaticamente, o script **naa-script.sh** será iniciado automaticamente na programação que você definiu na expressão cron. Esse script de shell executa as etapas de 2 a 7. Para obter mais informações, consulte *Automação e escala* no fim desta seção.

1. A EC2 instância da Amazon baixa o arquivo **naa-exception.csv** mais recente do bucket do Amazon S3. Esse arquivo é usado posteriormente no processo, quando o script Python processa as exclusões.

1. A EC2 instância da Amazon assume a função `NAAEC2Role` do IAM, que concede permissões para acessar o bucket do Amazon S3 e assumir `NAAExecRole` as funções do IAM nas outras contas da organização.

1. A EC2 instância da Amazon assume a função `NAAExecRole` do IAM na conta de gerenciamento da organização e gera uma lista das contas na organização.

1. A EC2 instância da Amazon assume a função do `NAAExecRole` IAM nas contas dos membros da organização (chamadas de contas de *carga de trabalho no diagrama de arquitetura) e realiza uma avaliação de segurança em cada conta*. As descobertas são armazenadas como arquivos JSON na EC2 instância da Amazon.

1. A EC2 instância da Amazon usa um script Python para processar os arquivos JSON e extrair os campos de dados para importação no CSPM do Security Hub.

1. A EC2 instância da Amazon importa as descobertas do Network Access Analyzer para o Security Hub CSPM.

1. Uma EventBridge regra da Amazon detecta a importação e usa um tópico do Amazon SNS para enviar um e-mail notificando o usuário de que o processo foi concluído.

1. O usuário visualiza as descobertas no CSPM do Security Hub.

**Automação e escala**

Você pode programar essa solução para executar o script **naa-script.sh** automaticamente em um agendamento personalizado. Para definir um agendamento personalizado, no modelo **naa-resources.yaml** CloudFormation , modifique o parâmetro. `CronScheduleExpression` Por exemplo, o valor padrão de `0 0 * * 0` executa a solução à meia-noite de todos os domingos. Um valor de `0 0 * 1-12 0` executaria a solução à meia-noite do primeiro domingo de cada mês. Para obter mais informações sobre o uso de expressões cron, consulte [Cron e expressões rate](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html) na documentação do Systems Manager.

Se quiser ajustar a programação após a implantação da pilha `NAA-Resources`, você pode editar manualmente a programação cron em `/etc/cron.d/naa-schedule`.

## Ferramentas
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-tools"></a>

**Serviços da AWS**
+ [O Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) fornece capacidade de computação escalável no. Nuvem AWS Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.
+  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
+ [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 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.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)fornece uma visão abrangente do seu estado de segurança em AWS. Também ajuda você a verificar seu AWS ambiente de acordo com os padrões e as melhores práticas do setor de segurança.
+ 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 [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 [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. Esse padrão usa o Session Manager, um atributo do Systems Manager.

**Repositório de código**

O código desse padrão está disponível no repositório de [análise de várias contas do GitHub Network Access Analyzer](https://github.com/aws-samples/network-access-analyzer-multi-account-analysis). O repositório de código contém os seguintes arquivos:
+ **naa-script.sh** — Esse script bash é usado para iniciar uma análise de vários dados do Network Access Analyzer Contas da AWS, em paralelo. Conforme definido no CloudFormation modelo **naa-resources.yaml**, esse script é implantado automaticamente na pasta na instância da Amazon. `/usr/local/naa` EC2 
+ **naa-resources.yaml** — Você usa esse CloudFormation modelo para criar uma pilha na conta de segurança na organização. Esse modelo implanta todos os recursos necessários para essa conta a fim de oferecer suporte à solução. Essa pilha deve ser implantada antes do modelo **naa-execrole.yaml**.
**nota**  
Se essa pilha for excluída e reimplantada, você deverá reconstruir o conjunto de pilhas `NAAExecRole` para reconstruir as dependências entre contas entre as perfis do IAM.
+ **naa-execrole.yaml** — Você usa esse CloudFormation modelo para criar um conjunto de pilhas que implanta a função `NAAExecRole` do IAM em todas as contas da organização, incluindo a conta de gerenciamento.
+ **naa-processfindings.py** — O script **naa-script.sh** chama automaticamente esse script Python para processar as saídas JSON do Network Access Analyzer, excluir quaisquer recursos em boas condições no arquivo **naa-exclusions.csv** e, em seguida, gerar um arquivo CSV com os resultados consolidados ou importar os resultados para o CSPM do Security Hub.

## Épicos
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-epics"></a>

### Preparar-se para implantação
<a name="prepare-for-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório de códigos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Consulte os modelos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Crie as CloudFormation pilhas
<a name="create-the-cfnshort-stacks"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Provisione recursos na conta de segurança. | Usando o modelo **naa-resources.yaml**, você cria uma CloudFormation pilha que implanta todos os recursos necessários na conta de segurança. Para obter instruções, consulte [Criação de uma pilha](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) na CloudFormation documentação. Observe o seguinte ao implantar esse modelo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Provisione o perfil do IAM nas contas dos membros. | Na conta AWS Organizations de gerenciamento ou em uma conta com permissões de administrador delegado para CloudFormation, use o modelo **naa-execrole.yaml** para criar um conjunto de pilhas. CloudFormation O conjunto de pilhas implanta o perfil `NAAExecRole` do IAM para todas as contas-membro da organização. Para obter instruções, consulte [Criar um conjunto de pilhas com permissões gerenciadas pelo serviço na documentação](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html#stacksets-orgs-associate-stackset-with-org). CloudFormation Observe o seguinte ao implantar esse modelo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Provisione o perfil do IAM na conta de gerenciamento. | Usando o modelo **naa-execrole.yaml**, você cria uma CloudFormation pilha que implanta a função do `NAAExecRole` IAM na conta de gerenciamento da organização. O conjunto de pilhas que você criou anteriormente não implanta o perfil do IAM na conta de gerenciamento. Para obter instruções, consulte [Criação de uma pilha](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) na CloudFormation documentação. Observe o seguinte ao implantar esse modelo:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Realizar a análise
<a name="perform-the-analysis"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Personalize o script de shell. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Analise as contas de destino. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Opção 1: recupere os resultados do bucket do Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Opção 2 — Analise os resultados no Security Hub CSPM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Corrija e exclua as descobertas
<a name="remediate-and-exclude-findings"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Corrija as descobertas. | Corrija as descobertas que você deseja abordar. Para obter mais informações e melhores práticas sobre como criar um perímetro em torno de suas AWS identidades, recursos e redes, consulte [Construindo um perímetro de dados em AWS](https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/building-a-data-perimeter-on-aws.html) (AWS Whitepaper). | AWS DevOps | 
| Exclua recursos com caminhos de rede em boas condições. | Se o Analisador de Acesso à Rede gerar descobertas para recursos que devem ser acessíveis pela Internet, você poderá adicionar esses recursos a uma lista de exclusão. Na próxima vez que o Analisador de Acesso à Rede for executado, ele não gerará uma descoberta para esse recurso.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### (Opcional) Atualize o script naa-script.sh
<a name="optional-update-the-naa-script-sh-script"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Atualize o script naa-script.sh. | Se você quiser atualizar o script **naa-script.sh** para a versão mais recente no repositório, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Limpar (opcional)
<a name="optional-clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua todos os recursos implantados. | Você pode deixar os recursos implantados nas contas.Para desprovisionar todos 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-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

## Solução de problemas
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Não é possível se conectar à EC2 instância da Amazon usando o Gerenciador de Sessões. | O SSM Agent deve conseguir se comunicar com o endpoint do Session Manager. Faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | 
| Ao implantar o conjunto de pilhas, o CloudFormation console solicita que você faça isso. `Enable trusted access with AWS Organizations to use service-managed permissions` | Isso indica que o acesso confiável não foi habilitado entre AWS Organizations CloudFormation e. É necessário o acesso confiável para implantar o conjunto de pilhas gerenciadas pelo serviço. Escolha o botão para habilitar o acesso confiável. Para obter mais informações, consulte [Habilitar acesso confiável](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) na CloudFormation documentação. | 

## Recursos relacionados
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-resources"></a>
+ [Novo — Analisador de acesso à rede Amazon VPC](https://aws.amazon.com/blogs/aws/new-amazon-vpc-network-access-analyzer/) (AWS publicação no blog)
+ [AWS Re:inforce 2022 - Valide controles efetivos de acesso à rede em AWS (NIS202) (vídeo)](https://youtu.be/aN2P2zeQek0)
+ [Demonstração - Análise do caminho de dados de entrada na Internet em toda a organização usando o Analisador de Acesso à Rede](https://youtu.be/1IFNZWy4iy0) (vídeo)

## Mais informações
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional"></a>

**Exemplo de saída de console**

O exemplo a seguir mostra o resultado da geração da lista de contas de destino e da análise das contas de destino.

```
[root@ip-10-10-43-82 naa]# ./naa-script.sh
download: s3://naa-<account ID>-us-east-1/naa-exclusions.csv to ./naa-exclusions.csv

AWS Management Account: <Management account ID>

AWS Accounts being processed...
<Account ID 1> <Account ID 2> <Account ID 3>

Assessing AWS Account: <Account ID 1>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 2>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 3>, using Role: NAAExecRole
Processing account: <Account ID 1> / Region: us-east-1
Account: <Account ID 1> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 2> / Region: us-east-1
Account: <Account ID 2> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 3> / Region: us-east-1
Account: <Account ID 3> / Region: us-east-1 – Detecting Network Analyzer scope...
Account: <Account ID 1> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 1> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 2> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 2> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 3> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 3> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
```

**Exemplos de relatórios CSV**

As imagens a seguir são exemplos da saída CSV.

![\[Exemplo 1 do relatório CSV gerado por essa solução.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/55e02e61-054e-4da6-aaae-c9a8b6f4f272.png)


![\[Exemplo 2 do relatório CSV gerado por essa solução.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/95f980ad-92c1-4392-92d4-9c742755aab2.png)


# Configure a resolução de DNS para redes híbridas em um ambiente com várias contas AWS
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment"></a>

*Anvesh Koganti, Amazon Web Services*

## Resumo
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-summary"></a>

Este padrão fornece uma solução abrangente para configurar a resolução de DNS em ambientes de rede híbrida que incluem várias contas da Amazon Web Services (AWS). Ele permite a resolução bidirecional de DNS entre redes locais e o ambiente por meio de endpoints. AWS Amazon Route 53 Resolver O padrão apresenta duas soluções para permitir a resolução de DNS em uma [arquitetura centralizada com várias contas](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html#multi-account-centralized):
+ A *configuração básica* não usa perfis do Route 53. Isso ajuda a otimizar os custos para implantações pequenas e médias de menor complexidade.
+ A *configuração avançada* usa perfis do Route 53 para simplificar as operações. É ideal para implantações de DNS maiores ou mais complexas.

**nota**  
Consulte a seção *Limitações* para ver as limitações e cotas do serviço antes da implementação. Considere fatores como despesas gerais de gerenciamento, custos, complexidade operacional e a experiência da equipe ao tomar sua decisão.

## Pré-requisitos e limitações
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-prereqs"></a>

**Pré-requisitos **
+ Um ambiente de AWS várias contas com Amazon Virtual Private Cloud (Amazon VPC) implantado em serviços compartilhados e contas de carga de trabalho (de preferência configurado por meio do [AWS Control Tower AWS seguindo as melhores](https://docs.aws.amazon.com/controltower/latest/userguide/aws-multi-account-landing-zone.html) práticas de estrutura de contas).
+ Conectividade híbrida existente (AWS Direct Connect ou AWS Site-to-Site VPN) entre sua rede local e o AWS ambiente.
+ Amazon VPC peering ou Nuvem AWS WAN para AWS Transit Gateway conectividade de rede de camada 3 entre. VPCs (Essa conectividade é necessária para o tráfego do aplicativo. Não é necessário que a resolução de DNS funcione. A resolução de DNS opera independentemente da conectividade de rede entre VPCs o.)
+ Servidores DNS em execução no ambiente on-premises.

**Limitações**
+ Os endpoints, regras e perfis do Route 53 Resolver são construções regionais e podem exigir replicação em vários Regiões da AWS para organizações globais.
+ Para obter uma lista abrangente de cotas de serviço para o Route 53 Resolver, zonas hospedadas privadas e perfis, consulte [Quotas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html) na documentação do Route 53.

## Arquitetura
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture"></a>

**Pilha de tecnologias de destino**
+ Endpoints de saída e entrada do Route 53
+ Regras do Route 53 Resolver para encaminhamento condicional
+ AWS Resource Access Manager (AWS RAM)
+ Zona hospedada privada do Route 53

**Arquitetura de destino**

**Endpoints de saída e entrada**

O diagrama a seguir mostra o fluxo de resolução de DNS do local AWS para o local. Essa é a configuração de conectividade para resoluções de saída em que o domínio está hospedado on-premises. Confira abaixo uma visão geral de alto nível do processo envolvido na configuração. Consulte a seção [Épicos ](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics) para obter detalhes.

1. Implante endpoints de saída do Route 53 Resolver na VPC de serviços compartilhados.

1. Crie regras do Route 53 Resolver (regras de encaminhamento) na conta de serviços compartilhados para domínios hospedados on-premises.

1. Compartilhe e associe as regras a outras contas que hospedam recursos que precisam resolver domínios hospedados no local. VPCs Isso pode ser feito de maneiras diferentes, dependendo do seu caso de uso, conforme descrito posteriormente nesta seção.

![\[Endpoints de entrada e saída em um fluxo de resolução de DNS da AWS para on-premises.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/d69d4cad-5e2c-4481-9370-2708e8a4f8c1.png)


Depois de configurar a conectividade, as etapas envolvidas na resolução de saída são as seguintes:

1. A instância Amazon Elastic Compute Cloud (Amazon EC2) envia uma solicitação de resolução de DNS `db.onprem.example.com` para o Resolvedor Route 53 da VPC no endereço VPC\$12.

1. O Resolvedor do Route 53 verifica as regras do Resolver e encaminha a solicitação para o servidor DNS local IPs usando o endpoint de saída.

1. O endpoint de saída encaminha a solicitação para o DNS local. IPs O tráfego passa pela conectividade de rede híbrida estabelecida entre a VPC de serviços compartilhados e o data center on-premises.

1. O servidor DNS on-premises responde de volta ao endpoint de saída, que então encaminha a resposta de volta para o Route 53 Resolver da VPC. O Resolver retorna a resposta para a EC2 instância.

O diagrama a seguir mostra o fluxo de resolução de DNS do ambiente local para o. AWS Essa é a configuração de conectividade para resoluções de entrada em que o domínio está hospedado na AWS. Confira abaixo uma visão geral de alto nível do processo envolvido na configuração. Consulte a seção [Épicos ](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics) para obter detalhes.

1. Implante endpoints de entrada do Resolver na VPC de serviços compartilhados.

1. Crie zonas hospedadas privadas na conta de serviços compartilhados (abordagem centralizada).

1. Associe as zonas hospedadas privadas à VPC de serviços compartilhados. Compartilhe e associe essas zonas a várias contas VPCs para resolução de VPC-to-VPC DNS. Isso pode ser feito de maneiras diferentes, dependendo do seu caso de uso, conforme descrito posteriormente nesta seção.

![\[Endpoints de entrada e saída em um fluxo de resolução de DNS de on-premises para a AWS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/a6f5348c-2041-453e-8939-2b4ee0b7ebd8.png)


Depois de configurar a conectividade, as etapas envolvidas na resolução de entrada são as seguintes:

1. O recurso on-premises envia uma solicitação de resolução de DNS para `ec2.prod.aws.example.com` ao servidor DNS on-premises.

1. O servidor DNS on-premises encaminha a solicitação para o endpoint do Resolver de entrada na VPC de serviços compartilhados pela conexão de rede híbrida.

1. O endpoint de entrada do Resolver pesquisa a solicitação na zona hospedada privada associada com a ajuda do Route 53 Resolver da VPC e obtém o endereço IP apropriado.

1. Esses endereços IP são enviados de volta ao servidor DNS on-premises, que retorna a resposta ao recurso on-premises.

Essa configuração permite que os recursos locais resolvam nomes de domínio AWS privados roteando consultas pelos endpoints de entrada para a zona hospedada privada apropriada. Nessa arquitetura, as zonas hospedadas privadas são centralizadas em uma VPC de serviços compartilhados, o que permite o gerenciamento centralizado do DNS por uma única equipe. Essas zonas podem ser associadas a várias VPCs para abordar o caso de uso da resolução de VPC-to-VPC DNS. Como alternativa, talvez você queira delegar a propriedade e o gerenciamento do domínio DNS a cada um. Conta da AWS Nesse caso, cada conta gerencia suas próprias zonas hospedadas privadas e associa cada zona à VPC central de serviços compartilhados para uma resolução unificada com o ambiente on-premises. Essa abordagem descentralizada está fora do escopo deste padrão. Para obter mais informações, consulte Como [escalar o gerenciamento de DNS em várias contas e VPCs](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html) no whitepaper Opções de *DNS de nuvem híbrida para Amazon VPC*.

Ao estabelecer os fluxos fundamentais de resolução de DNS usando os endpoints do Resolver, você precisa determinar como gerenciar o compartilhamento e a associação das regras do Resolver e das zonas hospedadas privadas em todas as Contas da AWS. Você pode abordar isso de duas maneiras: por meio do compartilhamento autogerenciado usando AWS RAM para compartilhar regras do Resolver e associações diretas de zonas hospedadas privadas, conforme detalhado na seção *Configuração básica*, ou por meio dos Perfis do Route 53, conforme discutido na seção *Configuração aprimorada*. A escolha depende das preferências de gerenciamento de DNS e dos requisitos operacionais da sua organização. Os diagramas de arquitetura a seguir ilustram um ambiente escalável que inclui várias contas VPCs diferentes, o que representa uma implantação corporativa típica.

**Configuração básica**

Na configuração básica, a implementação da resolução de DNS híbrida em um AWS ambiente de várias contas é usada AWS RAM para compartilhar regras de encaminhamento do Resolver e associações de zonas hospedadas privadas para gerenciar consultas de DNS entre locais e recursos. AWS Esse método usa endpoints centralizados do Route 53 Resolver em uma VPC de serviços compartilhados conectada à sua rede on-premises para executar a resolução de DNS de entrada e saída com eficiência.
+ Para resolução de saída, as regras de encaminhamento do Resolver são criadas na conta do Shared Services e depois compartilhadas com outras pessoas Contas da AWS usando. AWS RAM Esse compartilhamento é limitado às contas que estiverem na mesma região. As contas de destino podem então associar essas regras às suas VPCs e habilitar os recursos nelas VPCs para resolver nomes de domínio locais.
+ Para a resolução de entrada, zonas hospedadas privadas são criadas na conta de serviços compartilhados e associadas à VPC de serviços compartilhados. Essas zonas podem então ser associadas VPCs a outras contas usando a API do Route 53 ou a AWS Command Line Interface (AWS CLI). AWS SDKs Os recursos associados VPCs podem então resolver os registros DNS definidos nas zonas hospedadas privadas, o que cria uma visão unificada do DNS em todo o seu AWS ambiente.

O diagrama a seguir mostra os fluxos de resolução de DNS nessa configuração básica.

![\[Como usar a configuração básica para resolução de DNS híbrida em um ambiente da AWS com várias contas.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/258e4bcd-e9c6-43b5-bab8-856ca22206b9.png)


Essa configuração funciona bem quando você trabalha com a infraestrutura de DNS em uma escala limitada. No entanto, seu gerenciamento pode ficar mais difícil à medida que o ambiente aumenta. A sobrecarga operacional de gerenciar como a zona hospedada privada e as regras do Resolver são compartilhadas e associadas VPCs individualmente aumenta significativamente com a escala. Além disso, as cotas de serviço, como o limite de associação de 300 VPCs por zona hospedada privada, podem se tornar fatores restritivos em implantações em grande escala. A configuração avançada soluciona esses desafios.

**Configuração avançada**

Os perfis do Route 53 oferecem uma solução simplificada para gerenciar a resolução de DNS em redes híbridas em várias Contas da AWS. Em vez de gerenciar zonas hospedadas privadas e regras do Resolver individualmente, você pode agrupar as configurações de DNS em um único contêiner que pode ser facilmente compartilhado e aplicado em várias VPCs contas em uma região. Essa configuração mantém a arquitetura centralizada de endpoints do Resolver em uma VPC de serviços compartilhados e simplifica significativamente o gerenciamento das configurações de DNS.

O diagrama a seguir mostra os fluxos de resolução de DNS em uma configuração avançada.

![\[Como usar a configuração avançada com perfis do Route 53 para resolução de DNS híbrida em um ambiente da AWS com várias contas.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/55b9681d-ddb4-4a55-b4ec-fc9afa9870fa.png)


Os perfis do Route 53 permitem agrupar associações de zonas hospedadas privadas, regras de encaminhamento do Resolver e regras de firewall de DNS em uma única unidade compartilhável. Você pode criar perfis na conta do Shared Services e compartilhá-los com contas de membros usando AWS RAM. Quando um perfil é compartilhado e aplicado ao alvo VPCs, todas as associações e configurações necessárias são gerenciadas automaticamente pelo serviço. Isso reduz significativamente a sobrecarga operacional do gerenciamento de DNS e fornece excelente escalabilidade para ambientes em crescimento.

**Automação e escala**

Use ferramentas de infraestrutura como código (IaC), como CloudFormation o Terraform, para provisionar e gerenciar automaticamente endpoints, regras, zonas hospedadas privadas e perfis do Route 53 Resolver. Integre a configuração de DNS com pipelines de integração contínua e entrega contínua (CI/CD) para obter consistência, repetibilidade e atualizações rápidas.

## Ferramentas
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-tools"></a>

**Serviços da AWS**
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) ajuda você a compartilhar seus recursos com segurança Contas da AWS para reduzir a sobrecarga operacional e fornecer visibilidade e auditabilidade.
+ [Amazon Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)responde recursivamente às consultas de DNS dos AWS recursos e está disponível por padrão em todos. VPCs Você pode criar endpoints do Resolver e regras de encaminhamento condicional para resolver namespaces DNS entre seu data center local e seu. VPCs
+ A [zona hospedada privada do Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) é um contêiner que armazena informações sobre como você deseja que o Route 53 responda a consultas ao DNS para um domínio e seus subdomínios.
+ [Os perfis do Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html) permitem que você aplique e gerencie configurações do Route 53 relacionadas ao DNS em várias VPCs e diferentes configurações de forma Contas da AWS simplificada.

## Práticas recomendadas
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-best-practices"></a>

Esta seção fornece algumas das práticas recomendadas para otimizar o Route 53 Resolver. Elas representam um subconjunto das práticas recomendadas do Route 53. Para uma lista abrangente, consulte [Best practices for Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices.html).

**Evite configurações de loop com endpoints Resolver**
+ Projete sua arquitetura de DNS para evitar o roteamento recursivo planejando com cuidado as associações de VPCs. Quando uma VPC hospeda um endpoint de entrada, evite associá-la a regras do Resolver que possam criar referências circulares.
+ Use AWS RAM estrategicamente ao compartilhar recursos de DNS entre contas para manter caminhos de roteamento limpos.

Para obter mais informações, consulte [Avoid loop configurations with Resolver endpoints](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoints.html) na documentação do Route 53.

**Escalar endpoints do Resolver**
+ Para ambientes que exigem um alto número de consultas por segundo (QPS), é importante lembrar que há um limite de 10 mil QPS por ENI em um endpoint. Mais ENIs podem ser adicionados a um endpoint para escalar o DNS QPS.
+  CloudWatch Fornecedores `InboundQueryVolume` e `OutboundQueryVolume` métricas da Amazon (consulte a [CloudWatch documentação](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/monitoring-resolver-with-cloudwatch.html)). Recomendamos que você configure regras de monitoramento para alertar se o limite exceder um determinado valor (por exemplo, 80% de 10 mil QPS).
+ Configure regras de grupos de segurança com estado para endpoints do Resolver a fim de evitar que limites de rastreamento de conexão acionem um controle de consultas ao DNS durante um tráfego de alto volume. Para saber mais sobre como o rastreamento de conexão funciona em grupos de segurança, consulte [Rastreamento de conexão de grupos de EC2 segurança](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html) da Amazon na EC2 documentação da Amazon.

Para obter mais informações, consulte [Resolver endpoint scaling](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-scaling.html) na documentação do Route 53.

**Forneça alta disponibilidade para endpoints do Resolver**
+ Crie endpoints de entrada com endereços IP em, pelo menos, duas zonas de disponibilidade para garantir redundância.
+ Provisione interfaces de rede adicionais para garantir a disponibilidade durante manutenções ou picos de tráfego

Para obter mais informações, consulte [High availability for Resolver endpoints](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-high-availability.html) na documentação do Route 53.

## Épicos
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics"></a>

### Implantar endpoints do Route 53 Resolver
<a name="deploy-r53r-endpoints"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Implante um endpoint de entrada. | O Route 53 Resolver usa o endpoint de entrada para receber consultas ao DNS de solucionadores DNS on-premises. Para obter instruções, consulte [Encaminhando consultas de DNS de entrada para você VPCs ](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-inbound-queries.html) na documentação do Route 53. Anote o endereço IP do endpoint de entrada. | Administrador da AWS, administrador de nuvem | 
| Implante um endpoint de saída. | O Route 53 Resolver usa o endpoint de saída para enviar consultas ao DNS para solucionadores DNS on-premises. Para obter instruções, consulte [Como encaminhar consultas ao DNS de saída para sua rede](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-outbound-queries.html) na documentação do Route 53. Anote o ID do endpoint de saída. | Administrador da AWS, administrador de nuvem | 

### Configurar e compartilhar zonas hospedadas privadas do Route 53
<a name="configure-and-share-r53-private-hosted-zones"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma zona hospedada privada para um domínio hospedado em na AWS. | Essa zona contém os registros DNS dos recursos em um domínio AWS hospedado (por exemplo,`prod.aws.example.com`) que devem ser resolvidos a partir do ambiente local. Para obter instruções, consulte [Como criar uma zona hospedada privada](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) na documentação do Route 53.Ao criar uma zona hospedada privada, você deve associar uma VPC à zona hospedada que pertence à mesma conta. Selecione a VPC de serviços compartilhados para essa finalidade. | Administrador da AWS, administrador de nuvem | 
| Configuração básica: associe a zona hospedada privada VPCs a outras contas. | Se você estiver usando a configuração básica (consulte a seção [Arquitetura](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)):Para permitir que recursos na conta do membro VPCs resolvam registros DNS nessa zona hospedada privada, você deve associar o seu VPCs à zona hospedada. Você deve autorizar a associação e, em seguida, fazer a associação programaticamente. Para obter instruções, consulte [Associating an Amazon VPC and a private hosted zone that you created with different Contas da AWS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs-different-accounts.html) na documentação do Route 53. | Administrador da AWS, administrador de nuvem | 
| Configuração avançada: configure e compartilhe perfis do Route 53. | Se você estiver usando a configuração avançada (consulte a seção [Arquitetura](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)):[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)Dependendo da estrutura da sua organização e dos requisitos de DNS, talvez seja necessário criar e gerenciar vários perfis para diferentes contas ou workloads. | Administrador da AWS, administrador de nuvem | 

### Configurar e compartilhar regras de encaminhamento do Route 53 Resolver
<a name="configure-and-share-r53r-forwarding-rules"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma regra de encaminhamento para um domínio hospedado on-premises. | Essa regra instruirá o Route 53 Resolver a encaminhar qualquer consulta ao DNS para domínios on-premises (como `onprem.example.com`) para resolvedores do DNS on-premises. Para criar essa regra, você precisará dos endereços IP dos resolvedores do DNS on-premises e da ID do endpoint de saída. Para obter instruções, consulte [Criação de regras de encaminhamento](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-creating-rules.html) na documentação do Route 53. | Administrador da AWS, administrador de nuvem | 
| Configuração básica: compartilhe e associe a regra de encaminhamento à sua VPCs em outras contas. | Se estiver usando a configuração básica:Para que a regra de encaminhamento entre em vigor, você deve compartilhar e associar a regra às suas VPCs em outras contas. O Route 53 Resolver então leva a regra em consideração ao resolver um domínio. Para obter instruções, consulte [Compartilhamento de regras do Resolvedor com outras pessoas Contas da AWS e uso de regras compartilhadas](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-sharing.html) e [Associação de regras de encaminhamento a uma VPC](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-associating-rules.html) na documentação do Route 53. | Administrador da AWS, administrador de nuvem | 
| Configuração avançada: configure e compartilhe perfis do Route 53. | Se estiver usando a configuração avançada:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)Dependendo da estrutura da sua organização e dos requisitos de DNS, talvez seja necessário criar e gerenciar vários perfis para diferentes contas ou workloads. | Administrador da AWS, administrador de nuvem | 

### Configurar resolvedores de DNS locais para integração AWS
<a name="configure-on-premises-dns-resolvers-for-aws-integration"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
|  Configure o encaminhamento condicional nos resolvedores do DNS on-premises. | Para que as consultas DNS sejam enviadas AWS do ambiente local para resolução, você deve configurar o encaminhamento condicional nos resolvedores de DNS locais para apontar para o endereço IP do endpoint de entrada. Isso instrui os resolvedores de DNS a encaminhar todas as consultas de DNS do domínio AWS hospedado (por exemplo, for`prod.aws.example.com`) para o endereço IP do endpoint de entrada para resolução pelo Route 53 Resolver.  | Administrador de rede | 

### Verifique a resolução end-to-end do DNS em um ambiente híbrido
<a name="verify-end-to-end-dns-resolution-in-a-hybrid-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Teste a resolução de DNS AWS até o ambiente local. | Em uma instância de uma VPC que tenha a regra de encaminhamento associada a ela, execute uma consulta ao DNS para um domínio hospedado on-premises (por exemplo, `db.onprem.example.com`). | Administrador de rede | 
| Teste a resolução de DNS do ambiente local para. AWS | Em um servidor local, execute a resolução de DNS para um domínio AWS hospedado (por exemplo, para). `ec2.prod.aws.example.com` | Administrador de rede | 

## Recursos relacionados
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-resources"></a>
+ [Opções de DNS de nuvem híbrida para Amazon VPC](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/hybrid-cloud-dns-options-for-vpc.html)AWS (whitepaper)
+ [Working with private hosted zones](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) (documentação do Route 53)
+ [Getting started with Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-getting-started.html) (documentação do Route 53)
+ [Simplifique o gerenciamento de DNS em um ambiente de várias contas com o Route 53 Resolver](https://aws.amazon.com/blogs/security/simplify-dns-management-in-a-multiaccount-environment-with-route-53-resolver/) (AWS postagem no blog)
+ [Unifique o gerenciamento de DNS usando perfis do Amazon Route 53 com vários VPCs e Contas da AWS](https://aws.amazon.com/blogs/aws/unify-dns-management-using-amazon-route-53-profiles-with-multiple-vpcs-and-aws-accounts/) (AWS postagem no blog)
+ [Migrando seu ambiente DNS de várias contas para os perfis do Amazon Route 53](https://aws.amazon.com/blogs/networking-and-content-delivery/migrating-your-multi-account-dns-environment-to-amazon-route-53-profiles/) (AWS postagem no blog)
+ [Usando perfis do Amazon Route 53 para AWS ambientes escaláveis de várias contas](https://aws.amazon.com/blogs/networking-and-content-delivery/using-amazon-route-53-profiles-for-scalable-multi-account-aws-environments/) (AWS postagem no blog)

 

# Verifique se os balanceadores de carga ELB exigem terminação TLS
<a name="verify-that-elb-load-balancers-require-tls-termination"></a>

*Priyanka Chaudhary, Amazon Web Services*

## Resumo
<a name="verify-that-elb-load-balancers-require-tls-termination-summary"></a>

Na nuvem da Amazon Web Services (AWS), o Elastic Load Balancing (ELB) distribui automaticamente o tráfego de entrada do aplicativo em vários destinos, como instâncias do Amazon Elastic Compute Cloud (Amazon EC2), contêineres, endereços IP e funções do AWS Lambda. Os balanceadores de carga usam receptores para definir as portas e os protocolos que o balanceador de carga usa para aceitar o tráfego dos usuários. Os balanceadores de carga de aplicativos tomam decisões de roteamento na camada do aplicativo e usam os protocolos HTTP/HTTPS . Os Classic Load Balancers (Balanceadores de carga clássicos) tomam decisões de roteamento na camada de transporte, usando protocolos TCP ou Secure Sockets Layer (SSL), ou na camada de aplicação, usando HTTP/HTTPS.

Esse padrão fornece um controle de segurança que examina vários tipos de eventos para Application Load Balancers e Classic Load Balancers. Quando a função é invocada, o AWS Lambda inspeciona o evento e garante que o balanceador de carga esteja em conformidade.

A função inicia um evento Amazon CloudWatch Events nas seguintes chamadas de API: [CreateLoadBalancer[CreateLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerListeners.html)](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancer.html), [DeleteLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DeleteLoadBalancerListeners.html), [CreateLoadBalancerPolicy](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerPolicy.html), [SetLoadBalancerPoliciesOfListener](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_SetLoadBalancerPoliciesOfListener.html), [CreateListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateListener.html), [DeleteListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DeleteListener.html), e. [ModifyListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_ModifyListener.html) Quando o evento detecta um deles APIs, ele chama o AWS Lambda, que executa um script Python. O script Python avalia se o receptor contém um certificado SSL e se a política aplicada está usando Transport Layer Security (TLS). Se a política SSL for determinada como diferente de TLS, a função enviará uma notificação do Amazon Simple Notiﬁcation Service (Amazon SNS) ao usuário com as informações relevantes. 

## Pré-requisitos e limitações
<a name="verify-that-elb-load-balancers-require-tls-termination-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa

**Limitações**
+ Esse controle de segurança não verifica os balanceadores de carga existentes, a menos que seja feita uma atualização nos receptores do balanceador de carga.
+ Esse controle de segurança é regional. Você deve implantá-lo em cada região da AWS que você deseja monitorar.

## Arquitetura
<a name="verify-that-elb-load-balancers-require-tls-termination-architecture"></a>

**Arquitetura de destino**

![\[Garantir que os balanceadores de carga exijam encerramento do TLS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/da99cda2-ac34-4791-a2bd-d37264d8d3d9/images/af92b3c8-32bb-45eb-a2a8-d8276fb3e824.png)


**Automação e escala**
+ Se você estiver usando o [AWS Organizations](https://aws.amazon.com/organizations/), poderá usar o [AWS Cloudformation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) para implantar esse modelo em várias contas que você deseja monitorar.

## Ferramentas
<a name="verify-that-elb-load-balancers-require-tls-termination-tools"></a>

**Serviços da AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — CloudFormation A AWS ajuda você a modelar e configurar seus recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida. Você pode usar um modelo para descrever seus recursos e as dependências deles, além de inicializá-los e configurá-los juntos como uma pilha, em vez de gerenciar recursos individualmente.
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — O Amazon CloudWatch Events fornece um fluxo quase em tempo real de eventos do sistema que descrevem mudanças nos recursos da AWS.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html): o AWS Lambda é um serviço de computação que permite a execução do código sem provisionar ou gerenciar servidores
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html): o Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos altamente escalável que pode ser usado para uma ampla variedade de soluções de armazenamento, incluindo sites, aplicativos móveis, backups e data lakes.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html): o Amazon Simple Notiﬁcation Service (Amazon SNS) é um serviço da Web que coordena e gerencia a entrega ou o envio de mensagens entre publicadores e clientes, incluindo servidores da Web e endereços de e-mail. Os assinantes recebem todas as mensagens publicadas nos tópicos para os quais eles se inscrevem, e todos os assinantes em um tópico recebem as mesmas mensagens.

**Código **

Esse padrão inclui os seguintes anexos:
+ `ELBRequirestlstermination.zip`: o código Lambda para o controle de segurança.
+ `ELBRequirestlstermination.yml`— O CloudFormation modelo que configura o evento e a função Lambda.

## Épicos
<a name="verify-that-elb-load-balancers-require-tls-termination-epics"></a>

### Configurar o bucket do S3
<a name="set-up-the-s3-bucket"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Definir o bucket do S3. | No [console do Amazon S3](https://console.aws.amazon.com/s3/), escolha ou crie um bucket do S3 para hospedar o arquivo .zip do código do Lambda. Esse bucket do S3 deve estar na mesma região da AWS que o balanceador de carga que você deseja avaliar. Um nome de bucket do S3 é globalmente exclusivo, e o namespace é compartilhado por todas as contas da AWS. O nome do bucket do S3 não pode incluir barras iniciais. | Arquiteto de nuvem | 
| Faça o upload do código do Lambda. | Faça upload do código do Lambda (arquivo `ELBRequirestlstermination.zip`) fornecido na seção *Anexos* para o bucket do S3. | Arquiteto de nuvem | 

### Implante o CloudFormation modelo
<a name="deploy-the-cloudformation-template"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicie o CloudFormation modelo da AWS. | Abra o [ CloudFormation console da AWS](https://console.aws.amazon.com/cloudformation/) na mesma região da AWS do seu bucket do S3 e implante o modelo `ELBRequirestlstermination.yml` anexado. Para obter mais informações sobre a implantação de CloudFormation modelos da AWS, consulte [Como criar uma pilha no CloudFormation console da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) na CloudFormation documentação. | Arquiteto de nuvem | 
| Preencher os parâmetros no modelo. | Ao iniciar o modelo, você será solicitado a fornecer as seguintes informações:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/verify-that-elb-load-balancers-require-tls-termination.html) | Arquiteto de nuvem | 

### Confirmar a assinatura
<a name="confirm-the-subscription"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Confirmar a assinatura. | Quando o CloudFormation modelo é implantado com sucesso, ele envia um e-mail de assinatura para o endereço de e-mail que você forneceu. Você deve confirmar essa assinatura de e-mail para começar a receber notificações de violação. | Arquiteto de nuvem | 

## Recursos relacionados
<a name="verify-that-elb-load-balancers-require-tls-termination-resources"></a>
+ [Criação de uma pilha no CloudFormation console da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) ( CloudFormation documentação da AWS)
+ [O que é o AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) (Documentação do AWS Lambda)
+ [O que é um Classic Load Balancer?](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html) (Documentação do ELB)
+ [O que é um Application Load Balancer?](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) (Documentação do ELB)

## Anexos
<a name="attachments-da99cda2-ac34-4791-a2bd-d37264d8d3d9"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/da99cda2-ac34-4791-a2bd-d37264d8d3d9/attachments/attachment.zip)

# Visualização de logs e métricas do AWS Network Firewall usando o Splunk
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk"></a>

*Ivo Pinto, Amazon Web Services*

## Resumo
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-summary"></a>

Muitas organizações usam o [Splunk Enterprise](https://www.splunk.com/en_us/products/splunk-enterprise.html) como uma ferramenta centralizada de agregação e visualização para registros e métricas de diferentes fontes. Esse padrão ajuda você a configurar o Splunk para buscar registros e métricas do [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) do [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) usando o complemento Splunk para AWS. 

Para atingir esse objetivo, é necessário criar um perfil do AWS Identity and Access Management (IAM) com acesso somente para leitura. O complemento Splunk para AWS usa essa função para acessar. CloudWatch Você configura o complemento Splunk para AWS para buscar métricas e registros do. CloudWatch Por fim, você criará visualizações no Splunk usando os dados de logs e métricas recuperados.

## Pré-requisitos e limitações
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-prereqs"></a>

**Pré-requisitos **
+ Uma conta do [Splunk](https://www.splunk.com/)
+ Uma instância do Splunk Enterprise, versão 8.2.2 ou versões posteriores 
+ Uma conta AWS ativa
+ Firewall de rede, [configurado](https://docs.aws.amazon.com/network-firewall/latest/developerguide/getting-started.html) [e configurado](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-cw-logs.html) para enviar registros para o CloudWatch Logs

**Limitações**
+ O Splunk Enterprise deve ser implantado como um cluster de instâncias do Amazon Elastic Compute Cloud (Amazon EC2) na Nuvem AWS.
+ A coleta de dados usando um perfil do IAM automaticamente descoberto para o Amazon EC2 não é compatível nas regiões da AWS localizadas na China.

## Arquitetura
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-architecture"></a>

![\[Arquitetura de registro em log do AWS Network Firewall e do Splunk\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/c6ce254a-841f-4bed-8f9f-b35e99f22e56/images/3dd420e9-70af-4a42-b24d-c54872c55e0b.png)


O diagrama ilustra o seguinte:

1. O Network Firewall publica registros em CloudWatch Logs.

1. O Splunk Enterprise recupera métricas e registros de. CloudWatch

Para preencher métricas e logs de exemplo nesta arquitetura, uma workload gera tráfego que passa pelo endpoint do Network Firewall para se conectar à internet. Isso é obtido pelo uso de [tabelas de rotas](https://docs.aws.amazon.com/network-firewall/latest/developerguide/vpc-config.html#vpc-config-route-tables). Embora esse padrão use uma única instância do Amazon EC2 como carga de trabalho, esse padrão pode ser aplicado a qualquer arquitetura, desde que o Network Firewall esteja configurado para enviar registros para Logs. CloudWatch 

Essa arquitetura também usa uma instância do Splunk Enterprise em outra nuvem privada virtual (VPC). No entanto, a instância do Splunk pode estar em outro local, como na mesma VPC da carga de trabalho, desde que possa alcançar o. CloudWatch APIs

## Ferramentas
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-tools"></a>

**Serviços da AWS**
+ O [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ajuda você a centralizar os registros de todos os seus sistemas, aplicativos e serviços da AWS para que você possa monitorá-los e arquivá-los com segurança.
+ O [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) oferece capacidade computacional escalável na Nuvem AWS. Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.
+ [O AWS Network Firewall é um firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) de rede gerenciado e monitorado, além de um serviço de detecção e prevenção de intrusões VPCs na nuvem da AWS.

**Outras ferramentas**
+ O [Splunk](https://www.splunk.com/) ajuda você a monitorar, visualizar e analisar dados de log.

## Épicos
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-epics"></a>

### Criar um perfil do IAM
<a name="create-an-iam-role"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie a política do IAM. | Siga as instruções em [Como criar políticas usando o editor JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) para criar a política do IAM que concede acesso somente para leitura aos dados e métricas do CloudWatch Logs. CloudWatch Cole a política a seguir no editor de JSON.<pre>{<br />    "Statement": [<br />        {<br />            "Action": [<br />                "cloudwatch:List*",<br />                "cloudwatch:Get*",<br />                "network-firewall:List*",<br />                "logs:Describe*",<br />                "logs:Get*",<br />                "logs:List*",<br />                "logs:StartQuery",<br />                "logs:StopQuery",<br />                "logs:TestMetricFilter",<br />                "logs:FilterLogEvents",<br />                "network-firewall:Describe*"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": "*"<br />        }<br />    ],<br />    "Version": "2012-10-17"<br />}</pre> | Administrador da AWS | 
| Crie um novo perfil do IAM. | Siga as instruções em [Criação de uma função para delegar permissões a um serviço da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) para criar a função do IAM que o complemento Splunk para AWS usa para acessar. CloudWatch Em **Políticas de permissões**, escolha a política que você criou anteriormente. | Administrador da AWS | 
| Atribua o perfil do IAM às instâncias do EC2 presentes no cluster do Splunk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador da AWS | 

### Instalação do Splunk Add-On para AWS
<a name="install-the-splunk-add-on-for-aws"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale o complemento . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador do Splunk | 
| Configure as credenciais da AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Para obter mais informações, consulte [Find an IAM role within your Splunk platform instance](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Find_an_IAM_role_within_your_Splunk_platform_instance) na documentação do Splunk. | Administrador do Splunk | 

### Configure o acesso do Splunk ao CloudWatch
<a name="configure-splunk-access-to-cloudwatch"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure a recuperação dos registros do Firewall de Rede a partir dos CloudWatch Registros. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Por padrão, o Splunk busca os dados de logs a cada dez minutos. Esse é um parâmetro configurável em **Configurações avançadas**. Para obter mais informações, consulte [Configurar uma entrada de CloudWatch registros usando o Splunk Web](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_Logs_input_using_Splunk_Web) na documentação do Splunk. | Administrador do Splunk | 
| Configure a recuperação das métricas do Network Firewall de CloudWatch. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Por padrão, o Splunk busca os dados de métricas a cada cinco minutos. Esse é um parâmetro configurável em **Configurações avançadas**. Para obter mais informações, consulte [Configurar uma CloudWatch entrada usando o Splunk Web](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_input_using_Splunk_Web) na documentação do Splunk. | Administrador do Splunk | 

### Criação de visualizações no Splunk usando consultas
<a name="create-splunk-visualizations-by-using-queries"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Visualize os principais endereços IP de origem. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador do Splunk | 
| Visualize as estatísticas de pacotes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador do Splunk | 
| Visualize as portas de origem mais usadas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrador do Splunk | 

## Recursos relacionados
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-resources"></a>

**Documentação da AWS**
+ [Criar um perfil para delegar permissões a um serviço da AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) (documentação do IAM)
+ [Criação de políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-start) (Documentação do IAM)
+ [Logging and monitoring in AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-monitoring.html)(documentação do Network Firewall)
+ [Route table configurations for AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/route-tables.html) (documentação do Network Firewall)

**Publicações do blog da AWS**
+ [AWS Network Firewall deployment models](https://aws.amazon.com/pt/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/)

**AWS Marketplace**
+ [Splunk Enterprise Amazon Machine Image (AMI)](https://aws.amazon.com/marketplace/pp/prodview-l6oos72bsyaks)

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

**Topics**
+ [Acesse um bastion host usando o Session Manager e o Amazon EC2 Instance Connect](access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.md)
+ [Acesse aplicativos de contêineres de forma privada no Amazon ECS usando o AWS Fargate, a PrivateLink AWS e um Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [Acesse aplicativos de contêineres de forma privada no Amazon ECS usando a AWS PrivateLink e um Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Centralize a resolução de DNS usando o Microsoft AWS Managed Microsoft AD Active Directory local](centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.md)
+ [Crie um portal para microfrontends usando Angular e AWS Amplify Module Federation](create-amplify-micro-frontend-portal.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)
+ [Implemente controles de acesso baseados em atributos de detetive para sub-redes públicas usando AWS Config](deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.md)
+ [Implantação de controles de acesso preventivos por atributo para sub-redes públicas](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Habilite conexões criptografadas para instâncias de banco de dados PostgreSQL no Amazon RDS](enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.md)
+ [Estenda VRFs para a AWS usando o AWS Transit Gateway Connect](extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.md)
+ [Migre uma carga de trabalho F5 BIG-IP para F5 BIG-IP VE no Nuvem AWS](migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud.md)
+ [Migração dos NGINX Ingress Controllers ao habilitar o Modo Automático do Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.md)
+ [Preserve o espaço IP roteável em projetos de VPC com várias contas para sub-redes sem workload](preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets.md)
+ [Impeça o acesso à Internet no nível da conta usando uma política de controle de serviços](prevent-internet-access-at-the-account-level-by-using-a-service-control-policy.md)
+ [Envie alertas do AWS Network Firewall para um canal do Slack](send-alerts-from-aws-network-firewall-to-a-slack-channel.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)
+ [Configure a recuperação de desastres para o Oracle JD Edwards com o EnterpriseOne AWS Elastic Disaster Recovery](set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.md)
+ [Use as consultas do BMC Discovery para extrair dados de migração para o planejamento da migração](use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning.md)
+ [Uso do Network Firewall para capturar os nomes de domínio DNS da indicação do nome do servidor para o tráfego de saída](use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.md)

# Entrega de conteúdo
<a name="contentdelivery-pattern-list"></a>

**Topics**
+ [Envie AWS WAF registros para o Splunk usando o AWS Firewall Manager Amazon Data Firehose](send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.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)
+ [Mais padrões](contentdelivery-more-patterns-pattern-list.md)

# Envie AWS WAF registros para o Splunk usando o AWS Firewall Manager Amazon Data Firehose
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose"></a>

*Michael Friedenthal, Aman Kaur Gandhi e JJ Johnson, Amazon Web Services*

## Resumo
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-summary"></a>

Historicamente, havia duas maneiras de mover dados para o Splunk: uma arquitetura push ou pull. Uma *arquitetura pull* oferece garantias de entrega de dados por meio de novas tentativas, mas requer recursos dedicados no Splunk para pesquisar dados. As arquiteturas Pull geralmente não são em tempo real por causa da pesquisa. Uma *arquitetura push* normalmente tem menor latência, é mais escalável e reduz a complexidade operacional e os custos. No entanto, isso não garante a entrega e normalmente requer agentes.

A integração do Splunk com o Amazon Data Firehose fornece dados de fluxos em tempo real ao Splunk por meio de um coletor de eventos HTTP (HEC, na sigla em inglês). Essa integração oferece as vantagens das arquiteturas push e pull – ela garante a entrega de dados por meio de novas tentativas, é quase em tempo real e tem baixa latência e baixa complexidade. O HEC envia dados de forma rápida e eficiente por HTTP ou HTTPS diretamente para o Splunk. HECs são baseados em tokens, o que elimina a necessidade de codificar credenciais em um aplicativo ou em arquivos de suporte.

Em uma AWS Firewall Manager política, você pode configurar o registro para todo o tráfego de ACL AWS WAF da web em todas as suas contas e, em seguida, usar um stream de entrega do Firehose para enviar esses dados de registro ao Splunk para monitoramento, visualização e análise. Essa solução oferece os seguintes benefícios:
+ Gerenciamento central e registro do tráfego de ACL AWS WAF da web em todas as suas contas
+ Integração do Splunk com um único Conta da AWS
+ Escalabilidade
+ Entrega quase em tempo real dos dados de log
+ Otimização de custos por meio do uso de uma solução de tecnologia sem servidor, para que você não precise pagar por recursos não utilizados.

## Pré-requisitos e limitações
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS que faz parte de uma organização em AWS Organizations.
+ É necessário ter as seguintes permissões para habilitar o registro em log com o Firehose:
  + `iam:CreateServiceLinkedRole`
  + `firehose:ListDeliveryStreams`
  + `wafv2:PutLoggingConfiguration`
+ AWS WAF e sua web ACLs deve ser configurada. Para obter instruções, consulte [Introdução ao AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started.html).
+ AWS Firewall Manager deve ser configurado. Para obter instruções, consulte [AWS Firewall Manager prerequisites](https://docs.aws.amazon.com/waf/latest/developerguide/fms-prereq.html).
+ As políticas de segurança do Firewall Manager AWS WAF devem ser configuradas. Para obter instruções, consulte [Introdução às AWS Firewall ManagerAWS WAF políticas](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html).
+ O Splunk deve estar configurado com um endpoint HTTP público que possa ser acessado pelo Firehose.

**Limitações**
+ Eles Contas da AWS devem ser gerenciados em uma única organização em AWS Organizations.
+ A Web ACL deve estar na mesma região do que o fluxo de entrega. Se você estiver capturando registros para a Amazon CloudFront, crie o stream de entrega do Firehose na região Leste dos EUA (Norte da Virgínia),. `us-east-1`
+ O complemento do Splunk para o Firehose está disponível para implantações do Splunk Cloud com licença paga, para implementações distribuídas do Splunk Enterprise e para implementações de instância única do Splunk Enterprise. Esse complemento não é compatível com implantações de teste gratuito do Splunk Cloud.

## Arquitetura
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-architecture"></a>

**Pilha de tecnologias de destino**
+ Firewall Manager
+ Firehose
+ Amazon Simple Storage Service (Amazon S3)
+ AWS WAF
+ Splunk

**Arquitetura de destino**

A imagem a seguir mostra como você pode usar o Firewall Manager para registrar centralmente todos os AWS WAF dados e enviá-los ao Splunk por meio do Firehose.

![\[Diagrama da arquitetura ilustrando o envio de dados de log do AWS WAF para o Splunk por meio do Amazon Data Firehose.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/3dfeaae0-985a-42b8-91c4-ece081f0b51b/images/669169b1-caa4-419b-9988-19806ded54eb.png)


1. A AWS WAF web ACLs envia dados de registro do firewall para o Firewall Manager.

1. O Firewall Manager encaminha os dados de log para o Firehose.

1. O fluxo de entrega do Firehose envia os dados de log para o Splunk e para um bucket do S3. O bucket do S3 atua como um backup no caso de um erro com o stream de entrega do Firehose.

**Automação e escala**

Essa solução foi projetada para escalar e acomodar toda a AWS WAF web ALCs dentro da organização. Você pode configurar toda ACLs a web para usar a mesma instância do Firehose. No entanto, se desejar configurar e usar múltiplas instâncias do Firehose, isso também é possível.

## Ferramentas
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-tools"></a>

**Serviços da AWS**
+ [AWS Firewall Manager](https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html)é um serviço de gerenciamento de segurança que ajuda você a configurar e gerenciar centralmente as regras de firewall em suas contas e aplicativos em AWS Organizations.
+ [O Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) ajuda você a entregar [dados de streaming](https://aws.amazon.com/streaming-data/) em tempo real para outros Serviços da AWS endpoints HTTP personalizados e endpoints HTTP de propriedade de provedores de serviços terceirizados compatíveis, como o Splunk.
+ 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 [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**
+ O [Splunk](https://docs.splunk.com/Documentation) ajuda você a monitorar, visualizar e analisar dados de log.

## Épicos
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-epics"></a>

### Configurar o Splunk
<a name="configure-splunk"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale o aplicativo Splunk para AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Administrador de segurança, administrador do Splunk | 
| Instale o complemento para AWS WAF. | Repita as instruções anteriores para instalar o **complemento do AWS Web Application Firewall** para o Splunk. | Administrador de segurança, administrador do Splunk | 
| Faça a instalação e configuração do complemento do Splunk para o Firehose. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Administrador de segurança, administrador do Splunk | 

### Criação do fluxo de entrega do Firehose
<a name="create-the-akf-delivery-stream"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Conceda ao Firehose acesso a um destino do Splunk. | Configure a política de acesso que autoriza o Firehose a acessar um destino do Splunk e a armazenar os dados de log em backup em um bucket do S3. Para obter mais informações, consulte [Grant Firehose access to a Splunk destination](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-splunk). | Administrador de segurança | 
| Crie um fluxo de entrega do Firehose. | Na mesma conta em que você gerencia a web ACLs AWS WAF, crie um stream de entrega no Firehose. Você precisa ter um perfil do IAM ao criar um fluxo de entrega. O Firehose assume esse perfil do IAM e obtém acesso ao bucket do S3 especificado. Para obter instruções, consulte [Criação de um stream de entrega](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html). Observe o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html)Repita esse processo para cada token que você configurou no coletor de eventos HTTP. | Administrador de segurança | 
| Teste o fluxo de entrega. | Teste o stream de entrega para validar se ele está configurado corretamente. Para obter instruções, consulte [Test using Splunk as the destination](https://docs.aws.amazon.com/firehose/latest/dev/test-drive-firehose.html#test-drive-destination-splunk) na documentação do Firehose. | Administrador de segurança | 

### Configure o Firewall Manager para registrar dados
<a name="configure-firewall-manager-to-log-data"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure as políticas do Firewall Manager. | As políticas do Firewall Manager devem estar configuradas para habilitar o registro em log e encaminhar os logs para o fluxo de entrega correto do Firehose. Para obter mais informações e instruções, consulte [Como configurar o registro em log para uma AWS WAF política](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config). | Administrador de segurança | 

## Recursos relacionados
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-resources"></a>

**AWS recursos**
+ [Registrando tráfego de ACL da web](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html) (AWS WAF documentação)
+ [Configurando o registro em log para uma AWS WAF política](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config) (AWS WAF documentação)
+ [Tutorial: Sending VPC Flow Logs to Splunk Using Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/vpc-splunk-tutorial.html) (documentação do Firehose)
+ [How do I push VPC flow logs to Splunk using Amazon Data Firehose?](https://aws.amazon.com/premiumsupport/knowledge-center/push-flow-logs-splunk-firehose/) (Centro de AWS conhecimento)
+ [Potencialize a ingestão de dados no Splunk usando o Amazon Data Firehose](https://aws.amazon.com/blogs/big-data/power-data-ingestion-into-splunk-using-amazon-kinesis-data-firehose/) (postagem no blog)AWS 

**Documentação do Splunk**
+ [Splunk Add-on for Amazon Data Firehose](https://docs.splunk.com/Documentation/AddOns/released/Firehose/About)

# Ofereça conteúdo estático em um bucket do Amazon S3 por meio de uma VPC usando a Amazon CloudFront
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront"></a>

*Angel Emmanuel Hernandez Cebrian, Amazon Web Services*

## Resumo
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-summary"></a>

Quando você veicula conteúdo estático hospedado na Amazon Web Services (AWS), a abordagem recomendada é usar um bucket do Amazon Simple Storage Service (S3) como origem e usar a Amazon CloudFront para distribuir o conteúdo. Essa solução tem dois benefícios principais: a conveniência de armazenar em cache conteúdo estático em locais periféricos e a capacidade de definir [listas de controle de acesso à web](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html) (web ACLs) para a CloudFront distribuição, o que ajuda a proteger as solicitações de conteúdo com o mínimo de configuração e sobrecarga administrativa.

No entanto, há uma limitação arquitetônica comum à abordagem padrão recomendada. Em alguns ambientes, você deseja que dispositivos de firewall virtual sejam implantados em uma nuvem privada virtual (VPC) para inspecionar todo o conteúdo, inclusive conteúdo estático. A abordagem padrão não direciona o tráfego pela VPC para inspeção. Esse padrão fornece uma solução arquitetônica alternativa. Você ainda usa uma CloudFront distribuição para veicular conteúdo estático em um bucket do S3, mas o tráfego é roteado pela VPC usando um Application Load Balancer. Em seguida, uma função do AWS Lambda recupera e retorna o conteúdo do bucket do S3.

## Pré-requisitos e limitações
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Conteúdo estático do site hospedado em um bucket S3.

**Limitações**
+ Os recursos nesse padrão devem estar em uma única região da AWS, mas podem ser provisionados em diferentes contas da AWS.
+ Os limites se aplicam ao tamanho máximo de solicitação e resposta que a função do Lambda pode receber e enviar, respectivamente. Para obter mais informações, consulte *Limites* em [Funções do Lambda como destino](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) (documentação do Elastic Load Balancing).
+ É importante encontrar um bom equilíbrio entre desempenho, escalabilidade, segurança e economia ao usar essa abordagem. Apesar da alta escalabilidade do Lambda, se o número de invocações simultâneas do Lambda exceder a cota máxima, algumas solicitações serão limitadas. Para obter mais informações, consulte cotas do Lambda (documentação do Lambda). Você também precisa considerar os preços ao usar o Lambda. Para minimizar as invocações do Lambda, certifique-se de definir adequadamente o cache para a distribuição. CloudFront Para obter mais informações, consulte [Otimizando o armazenamento em cache e a disponibilidade](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html) (CloudFront documentação).

## Arquitetura
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-architecture"></a>

**Pilha de tecnologias de destino**
+ CloudFront
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Application Load Balancer
+ Lambda
+ Amazon S3

**Arquitetura de destino**

A imagem a seguir mostra a arquitetura sugerida quando você precisa usá-la CloudFront para servir conteúdo estático de um bucket do S3 por meio de uma VPC.

![\[O tráfego flui por meio de Application Load Balancers na VPC para a função do Lambda.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e0dd6928-4fe0-47ab-954f-9de5563349d8/images/b42c7dd9-4a72-4998-bf88-195c8f90ed3e.png)


1. O cliente solicita o URL de CloudFront distribuição para obter um arquivo de site específico no bucket do S3.

1. CloudFront envia a solicitação para o AWS WAF. O AWS WAF filtra a solicitação usando a web ACLs aplicada à CloudFront distribuição. Se a solicitação for determinada como válida, o fluxo continuará. Se a solicitação for determinada como inválida, o cliente receberá um erro 403.

1. CloudFront verifica seu cache interno. Se houver uma chave válida correspondente à solicitação recebida, o valor associado será enviado de volta ao cliente como resposta. Caso contrário, o fluxo continua.

1. CloudFront encaminha a solicitação para a URL do Application Load Balancer especificado.

1. O Application Load Balancer tem um receptor associado a um grupo de destino baseado em uma função do Lambda. O Application Load Balancer invoca a função do Lambda.

1. A função do Lambda se conecta ao bucket do S3, executa uma operação `GetObject` nele e retorna o conteúdo como resposta.

**Automação e escala**

Para automatizar a implantação de conteúdo estático usando essa abordagem, crie CI/CD pipelines para atualizar os buckets do Amazon S3 que hospedam sites.

A função do Lambda é escalada automaticamente para lidar com as solicitações simultâneas, dentro das cotas e limitações do serviço. Para obter mais informações, consulte [Dimensionamento da função do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html) e [Cotas do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) (documentação do Lambda). Para os outros serviços e recursos da AWS, como CloudFront o Application Load Balancer, a AWS os escala automaticamente.

## Ferramentas
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-tools"></a>
+ [A Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) acelera a distribuição do seu conteúdo da web entregando-o por meio de uma rede mundial de data centers, o que reduz a latência e melhora o desempenho.
+ O [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Nesse padrão, você usa um [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) provisionado por meio do Elastic Load Balancing para direcionar o tráfego para a função do Lambda.
+ 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.
+ A [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) ajuda a iniciar recursos da AWS em uma rede virtual definida por você. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

## Épicos
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-epics"></a>

### Use CloudFront para servir conteúdo estático do Amazon S3 por meio de uma VPC
<a name="use-cloudfront-to-serve-static-content-from-amazon-s3-through-a-vpc"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma VPC. | Crie uma VPC para hospedar os recursos implantados nesse padrão, como o Application Load Balancer e a função do Lambda.  Para obter instruções, consulte [Criar uma VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC) (documentação da Amazon VPC). | Arquiteto de nuvem | 
| Crie uma ACL web do AWS WAF. | Crie uma ACL web do AWS WAF. Posteriormente nesse padrão, você aplica essa ACL da web à CloudFront distribuição. Para obter instruções, consulte [Criação de uma ACL da web](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-creating.html) (documentação do AWS WAF). | Arquiteto de nuvem | 
| Criar a função do Lambda. | Crie a função do Lambda que serve o conteúdo estático hospedado no bucket do S3 como um site. Use o código fornecido na seção [Informações adicionais](#serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional) desse padrão. Personalize o código para identificar o bucket do S3 de destino. | AWS geral | 
| Upload a função do Lambda. | Insira o comando a seguir para carregar o código da função do Lambda em um arquivo de arquivo .zip no Lambda.<pre>aws lambda update-function-code \<br />--function-name  \ <br />--zip-file fileb://lambda-alb-s3-website.zip</pre> | AWS geral | 
| Criar um Application Load Balancer. | Crie um Application Load Balancer voltado para a Internet que aponte para a função do Lambda. Para obter instruções, consulte [Criar um grupo de destino para a função do Lambda](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#register-lambda-function) (documentação do Elastic Load Balancing). Para criar uma configuração de alta disponibilidade, crie o Application Load Balancer e conecte-o a sub-redes privadas em diferentes zonas de disponibilidade. | Arquiteto de nuvem | 
| Crie uma CloudFront distribuição. | Crie uma CloudFront distribuição que aponte para o Application Load Balancer que você criou.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.html) | Arquiteto de nuvem | 

## Recursos relacionados
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-resources"></a>

**Documentação da AWS**
+ [Otimizando o armazenamento em cache e a disponibilidade (documentação](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html)) CloudFront 
+ [Funções do Lambda como destino](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) (documentação do Elastic Load Balancing)
+ [Cotas Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) (documentação Lambda)

**Sites de serviços da AWS**
+ [Application Load Balancer](https://aws.amazon.com/es/elasticloadbalancing/application-load-balancer/)
+ [Lambda](https://aws.amazon.com/en/lambda/)
+ [CloudFront](https://aws.amazon.com/en/cloudfront/)
+ [Amazon S3](https://aws.amazon.com/en/s3/)
+ [AWS WAF](https://aws.amazon.com/en/waf/)
+ [Amazon VPC](https://aws.amazon.com/en/vpc/)

## Mais informações
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional"></a>

**Código **

O exemplo de função do Lambda a seguir foi escrito em Node.js. Essa função do Lambda atua como um servidor web que executa uma operação `GetObject` em um bucket do S3 que contém os recursos do site. 

```
/**

 * This is an AWS Lambda function created for demonstration purposes.

 * It retrieves static assets from a defined Amazon S3 bucket.

 * To make the content available through a URL, use an Application Load Balancer with a Lambda integration.
 * 
 * Set the S3_BUCKET environment variable in the Lambda function definition.
 */

var AWS = require('aws-sdk');

exports.handler = function(event, context, callback) {

    var bucket = process.env.S3_BUCKET;    
    var key = event.path.replace('/', '');
    
    if (key == '') {
        key = 'index.html';
    }

    // Fetch from S3
    var s3 = new AWS.S3();
    return s3.getObject({Bucket: bucket, Key: key},
       function(err, data) {

            if (err) {
                return err;
            }

            var isBase64Encoded = false;
            var encoding = 'utf8';
            
            if (data.ContentType.indexOf('image/') > -1) {
                isBase64Encoded = true;
                encoding = 'base64'
            }
    
            var resp = {
                statusCode: 200,
                headers: {
                    'Content-Type': data.ContentType,
                },
                body: new Buffer(data.Body).toString(encoding),
                isBase64Encoded: isBase64Encoded
            };

            callback(null, resp);
        }
    );
};
```

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

**Topics**
+ [Verifique a versão de registro de acesso, HTTPS e TLS em uma CloudFront distribuição da Amazon](check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version.md)
+ [Implemente um aplicativo baseado em gRPC em um cluster Amazon EKS e acesse-o com um Application Load Balancer](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.md)
+ [Implantação de controles de acesso preventivos por atributo para sub-redes públicas](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Implante recursos em uma AWS Wavelength zona usando o Terraform](deploy-resources-wavelength-zone-using-terraform.md)
+ [Implemente as automações de segurança para a AWS WAF solução usando o Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Configuração de um roteador celular sem servidor para uma arquitetura baseada em células](serverless-cell-router-architecture.md)
+ [Uso do Amazon Q Developer como um assistente de codificação para aumentar a produtividade](use-q-developer-as-coding-assistant-to-increase-productivity.md)
+ [Visualização de logs e métricas do AWS Network Firewall usando o Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)