

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configurez le dimensionnement automatique piloté par les événements dans Amazon EKS à l'aide d'Amazon EKS Pod Identity et KEDA
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi et Mahendra Asiddappa, Amazon Web Services*

## Résumé
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Les plateformes d'orchestration, telles qu'[Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS), ont rationalisé la gestion du cycle de vie des applications basées sur des conteneurs. Cela permet aux entreprises de se concentrer sur le développement, la sécurisation, l'exploitation et la maintenance d'applications basées sur des conteneurs. Les déploiements pilotés par des événements devenant de plus en plus courants, les entreprises adaptent de plus en plus fréquemment les déploiements Kubernetes en fonction de diverses sources d'événements. Cette méthode, associée à la mise à l'échelle automatique, peut permettre de réaliser d'importantes économies en fournissant des ressources de calcul à la demande et une mise à l'échelle efficace adaptée à la logique des applications.

[KEDA](https://keda.sh/) est un autoscaler piloté par les événements basé sur Kubernetes. KEDA vous aide à dimensionner n'importe quel conteneur dans Kubernetes en fonction du nombre d'événements à traiter. Il est léger et s'intègre à n'importe quel cluster Kubernetes. Il fonctionne également avec les composants standard de Kubernetes, tels que [Horizontal Pod Autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (HPA). KEDA propose [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication)également une fonctionnalité qui vous permet de déléguer l'authentification. Il vous permet de décrire des paramètres d'authentification distincts des conteneurs ScaledObject et des conteneurs de déploiement.

AWS fournit des rôles Gestion des identités et des accès AWS (IAM) qui prennent en charge diverses options de déploiement de Kubernetes, notamment Amazon EKS, Amazon EKS Anywhere Red Hat OpenShift Service on AWS (ROSA), et des clusters Kubernetes autogérés sur Amazon Elastic Compute Cloud (Amazon). EC2 Ces rôles utilisent des structures IAM, telles que les fournisseurs d'identité OpenID Connect (OIDC) et les politiques de confiance IAM, pour fonctionner dans différents environnements sans s'appuyer directement sur les services Amazon EKS ou. APIs Pour plus d'informations, consultez les [rôles IAM pour les comptes de service](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) dans la documentation Amazon EKS.

[Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) simplifie le processus permettant aux comptes de service Kubernetes d'assumer des rôles IAM sans avoir besoin de fournisseurs OIDC. Il permet de gérer les informations d'identification de vos applications. Au lieu de créer et de distribuer vos AWS informations d'identification aux conteneurs ou d'utiliser le rôle de l' EC2 instance Amazon, vous associez un rôle IAM à un compte de service Kubernetes et configurez vos Pods pour utiliser le compte de service. Cela vous permet d'utiliser un rôle IAM sur plusieurs clusters et simplifie la gestion des politiques en permettant la réutilisation des politiques d'autorisation entre les rôles IAM.

En implémentant KEDA avec Amazon EKS Pod Identity, les entreprises peuvent bénéficier d'une mise à l'échelle automatique efficace axée sur les événements et d'une gestion simplifiée des informations d'identification. Les applications évoluent en fonction de la demande, ce qui optimise l'utilisation des ressources et réduit les coûts.

Ce modèle vous permet d'intégrer Amazon EKS Pod Identity à KEDA. Il montre comment vous pouvez utiliser le compte de `keda-operator` service et déléguer l'authentification avec`TriggerAuthentication`. Il décrit également comment établir une relation de confiance entre un rôle IAM pour l'opérateur KEDA et un rôle IAM pour l'application. Cette relation de confiance permet à KEDA de surveiller les messages dans les files d'attente d'événements et d'ajuster le dimensionnement pour les objets Kubernetes de destination.

## Conditions préalables et limitations
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Conditions préalables**
+ AWS Command Line Interface [(AWS CLI) version 2.13.17 ou ultérieure, installée](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Python version 3.11.5 ou ultérieure, installée](https://www.python.org/downloads/)
+ AWS SDK pour Python (Boto3) [version 1.34.135 ou ultérieure, installée](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ [Helm version 3.12.3 ou ultérieure, installée](https://helm.sh/docs/intro/install/)
+ [kubectl version 1.25.1 ou ultérieure, installée](https://kubernetes.io/docs/tasks/tools/)
+ [Docker Engine version 26.1.1 ou ultérieure, installé](https://docs.docker.com/engine/install/)
+ [Un cluster Amazon EKS version 1.24 ou ultérieure, créé](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ [Conditions préalables à la création de l'agent Amazon EKS Pod Identity, remplies](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create)

**Limites**
+ Vous devez établir une relation de confiance entre le `keda-operator` rôle et le `keda-identity` rôle. Les instructions sont fournies dans la section [Epics](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) de ce modèle.

## Architecture
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

Dans ce modèle, vous créez les AWS ressources suivantes :
+ Référentiel **Amazon Elastic Container Registry (Amazon ECR)** — Dans ce modèle, ce dépôt est nommé. `keda-pod-identity-registry` Ce dépôt privé est utilisé pour stocker des images Docker de l'exemple d'application.
+ **File d'attente Amazon Simple Queue Service (Amazon SQS)** — Dans ce modèle, cette file d'attente est nommée. `event-messages-queue` La file d'attente agit comme un tampon de messages qui collecte et stocke les messages entrants. KEDA surveille les métriques de file d'attente, telles que le nombre de messages ou la longueur de la file d'attente, et adapte automatiquement l'application en fonction de ces métriques.
+ **Rôle IAM pour l'application** : dans ce modèle, ce rôle est nommé`keda-identity`. Le `keda-operator` rôle assume ce rôle. Ce rôle permet d'accéder à la file d'attente Amazon SQS.
+ **Rôle IAM pour l'opérateur KEDA** — Dans ce modèle, ce rôle est nommé. `keda-operator` L'opérateur KEDA utilise ce rôle pour effectuer les appels d' AWS API requis. Ce rôle est autorisé à assumer ce `keda-identity` rôle. En raison de la relation de confiance entre les `keda-identity` rôles `keda-operator` et, le `keda-operator` rôle dispose des autorisations Amazon SQS.

Par le biais des ressources personnalisées `TriggerAuthentication` et de `ScaledObject` Kubernetes, l'opérateur utilise le `keda-identity` rôle pour se connecter à une file d'attente Amazon SQS. En fonction de la taille de la file d'attente, KEDA adapte automatiquement le déploiement de l'application. Il ajoute 1 pod pour 5 messages non lus dans la file d'attente. Dans la configuration par défaut, s'il n'y a aucun message non lu dans la file d'attente Amazon SQS, l'application est réduite à 0 pods. L'opérateur KEDA surveille la file d'attente à un intervalle que vous spécifiez.

 

L'image suivante montre comment utiliser Amazon EKS Pod Identity pour fournir au `keda-operator` rôle un accès sécurisé à la file d'attente Amazon SQS.

![\[Utilisation de KEDA et Amazon EKS Pod Identity pour dimensionner automatiquement une application basée sur Kubernetes.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


Le schéma suivant illustre le flux de travail suivant :

1. Vous installez l'agent Amazon EKS Pod Identity dans le cluster Amazon EKS.

1. Vous déployez l'opérateur KEDA dans l'espace de noms KEDA du cluster Amazon EKS.

1. Vous créez les rôles `keda-operator` et `keda-identity` IAM dans la cible Compte AWS.

1. Vous établissez une relation de confiance entre les rôles IAM.

1. Vous déployez l'application dans l'espace de `security` noms.

1. L'opérateur KEDA interroge les messages dans une file d'attente Amazon SQS.

1. KEDA lance le HPA, qui adapte automatiquement l'application en fonction de la taille de la file d'attente.

## Outils
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

**Services AWS**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) est un service géré de registre d'images de conteneurs sécurisé, évolutif et fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) vous permet d'exécuter AWS Kubernetes sans avoir à installer ou à gérer votre propre plan de contrôle ou vos propres nœuds Kubernetes.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Amazon Simple Queue Service (Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) fournit une file d'attente hébergée sécurisée, durable et disponible qui vous permet d'intégrer et de dissocier les systèmes et composants logiciels distribués.

**Autres outils**
+ [KEDA](https://keda.sh/) est un autoscaler piloté par les événements basé sur Kubernetes.

**Référentiel de code**

Le code de ce modèle est disponible dans le [dimensionnement GitHub automatique piloté par les événements à l'aide d'EKS Pod Identity et du référentiel KEDA](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main).

## Bonnes pratiques
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Nous vous recommandons de respecter les bonnes pratiques ci-dessous :
+ [Bonnes pratiques d'Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Bonnes pratiques de sécurité dans IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
+ [Bonnes pratiques relatives à Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Épopées
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Créez des AWS ressources
<a name="create-aws-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez le rôle IAM pour l'opérateur KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrateur AWS | 
| Créez le rôle IAM pour l'exemple d'application. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrateur AWS | 
| Créez une file d’attente Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS général | 
| créer un référentiel Amazon ECR ; | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS général | 

### Configuration du cluster Amazon EKS
<a name="set-up-the-eks-cluster"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Déployez l'agent Amazon EKS Pod Identity. | Pour le cluster Amazon EKS cible, configurez l'agent Amazon EKS Pod Identity. Suivez les instructions de la [section Configurer l'agent d'identité Amazon EKS Pod](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) dans la documentation Amazon EKS. | AWS DevOps | 
| Déployez KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Attribuez le rôle IAM au compte de service Kubernetes. | Suivez les instructions de la section [Attribuer un rôle IAM à un compte de service Kubernetes dans](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) la documentation Amazon EKS. Utilisez les valeurs suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Créez un espace de noms . | Entrez la commande suivante pour créer un espace de `security` noms dans le cluster Amazon EKS cible :<pre>kubectl create ns security</pre> | DevOps ingénieur | 

### Déploiement de l'exemple d'application
<a name="deploy-the-sample-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Clonez les fichiers de l'application. | Entrez la commande suivante pour cloner le [dimensionnement automatique piloté par les événements à l'aide d'EKS Pod Identity et du référentiel KEDA depuis](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) : GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps ingénieur | 
| Développez l’image Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Transférez l'image Docker vers Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Vous pouvez trouver les commandes push en accédant à la page du référentiel Amazon ECR, puis en choisissant **Afficher les commandes push**. | DevOps ingénieur | 
| Déployez un exemple d'application | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Attribuez le rôle IAM au compte du service d'application. | Procédez de l'une des manières suivantes pour associer le rôle `keda-identity` IAM au compte de service de l'exemple d'application :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Déployez `ScaledObject` et`TriggerAuthentication`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 

### Testez la mise à l'échelle automatique
<a name="test-auto-scaling"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Envoyez des messages à la file d'attente Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 
| Surveillez les modules de l'application. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps ingénieur | 

## Résolution des problèmes
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| L'opérateur KEDA ne peut pas redimensionner l'application. | Entrez la commande suivante pour vérifier les journaux du rôle `keda-operator` IAM :<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre> S'il existe un code de `HTTP 403` réponse, cela signifie que l'application et le scaler KEDA ne disposent pas des autorisations suffisantes pour accéder à la file d'attente Amazon SQS. Procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)En cas d'`Assume-Role`erreur, le [rôle IAM d'un nœud Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) ne peut pas assumer le rôle IAM défini pour. `TriggerAuthentication` Procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Ressources connexes
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Configuration de l'agent d'identité Amazon EKS Pod](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) (documentation Amazon EKS)
+ [Déploiement de KEDA](https://keda.sh/docs/2.14/deploy/) (documentation KEDA)
+ [ScaledObject spécification](https://keda.sh/docs/2.16/reference/scaledobject-spec/) (documentation KEDA)
+ [Authentification avec TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (documentation KEDA)