

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

# 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><br /> <br />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)<br />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)