Le Blog Amazon Web Services

Optimisation de la densité des tâches Amazon ECS par instance à l’aide du mode réseau awsvpc

AWS a augmenté le nombre d’interfaces réseau élastiques disponibles lorsque vous exécutez des tâches sur Amazon ECS. Cela consiste à utiliser le paramètre de compte awsvpcTrunking. Si vous utilisez le type de lancement Amazon EC2 et la mise en réseau des tâches (ie mode réseau awsvpc), vous pouvez désormais exécuter plus de tâches sur une seule instance (5 à 17 fois plus nombreuses). À mesure que l’adoption des architectures de type microservice augmente, les tâches déployées sont de plus en plus petites et donc nombreuses. AWS vous offre désormais la possibilité d’une occupation plus efficace par instance, ce qui peut entraîner des clusters plus petits et des économies associées.

Approche

Pour gérer votre propre cluster d’instances Amazon EC2, vous allez utiliser le type de lancement EC2. Vous utilisez alors la mise en réseau des tâches pour exécuter des tâches ECS en utilisant les mêmes propriétés que si les tâches étaient des instances EC2 distinctes.
La mise en réseau des tâches offre plusieurs avantages. Chaque tâche lancée en mode réseau via awsvpc a sa propre interface réseau, une adresse IP privée principale et un nom d’hôte DNS interne. Cela simplifie la mise en réseau des conteneurs et vous donne plus de contrôle sur la façon dont les tâches communiquent, à la fois entre elles et avec d’autres services au sein de leurs Virtual Private Cloud (VPC). La mise en réseau des tâches vous permet également de profiter d’autres fonctionnalités réseau EC2 telles que les VPC Flow Logs. Cette fonctionnalité vous permet de surveiller le trafic à destination et en provenance des tâches. Il offre également un meilleur contrôle de sécurité pour les conteneurs, ce qui vous permet d’utiliser des Security Groups et des outils de surveillance du réseau à un niveau plus granulaire au sein des tâches. Pour plus d’informations, consultez  » Introducing Cloud Native Networking for Amazon ECS Containers « . Toutefois, si vous exécutez des tâches de conteneur sur des instances EC2 avec la mise en réseau des tâches, vous pouvez faire face à une limite, en particulier lorsqu’une instance a beaucoup de CPU disponible et de mémoire libre. La limite concerne le nombre d’interfaces réseau disponibles pour prendre en charge le mode réseau awsvpc par instance de conteneur.

Augmenter les limites de densité de l’interface réseau avec le “ trunking ”

Il est maintenant possible d’augmenter les limites de densité d’interface réseau en implémentant une fonctionnalité de mise en réseau sur ECS appelée « trunking ». Il s’agit d’une technique permettant de multiplexer des données sur un lien de communication partagé. Si vous migrez vers des microservices à l’aide d’AWS App Mesh, vous devez optimiser la densité de l’interface réseau. App Mesh nécessite la mise en réseau awsvpc pour fournir un contrôle de routage et une visibilité sur un éventail de tâches en cours d’exécution en constante expansion. Dans ce contexte, une densité accrue d’interface réseau permettrait de faire des économies.
En optant pour le “trunking” d’interface réseau, vous devriez observer une augmentation significative de la capacité, de 5 à 17 fois supérieure à la limite précédente. Pour plus d’informations sur les limites de tâches par instance de conteneur, consultez Supported Amazon EC2 Instance Types. Les applications dont les tâches n’atteignent pas les limites de CPU ou de mémoire bénéficient également de cette fonctionnalité grâce au« bin packing » des instances hébergeant des conteneurs.

Le Trunking reste une caractéristique optionnelle (soumise à “opt-in”)

AWS a choisi de rendre la caractéristique trunking optionnelle pour les raisons suivantes:

  • Enregistrement d’instance : Bien que l’enregistrement d’instance reste simple avec le trunking, cette fonctionnalité augmente le nombre d’étapes asynchrones d’enregistrement d’instance susceptibles d’échouer. Ces échecs peuvent ajouter des secondes supplémentaires à la durée de lancement,
  • Adresses IP disponibles : Le “trunk” appartient au même subnet que l’interface réseau principale de l’instance. Cela réduit le nombre d’adresses IP disponibles et potentiellement la possibilité de lancer d’autres instances EC2 partageant le même subnet lors d’une forte montée en charge. Le “trunk” consomme une adresse IP. Lorsqu’un “trunk” est connecté, deux adresses IP sont attribuées par instance, l’une pour l’interface principale et l’autre pour le “trunk”,
  • Différentes préférences et différentes infrastructures : Si vous avez des applications avec des charges CPU ou mémoire élevées, vous risquez de ne pas bénéficier du trunking. Ou, vous pouvez ne pas vouloir utiliser la mise en réseau awsvpc.

Par conséquent, AWS vous laisse le soin de décider si vous souhaitez utiliser ou non cette fonctionnalité. AWS pourrait revoir cette décision à l’avenir, en fonction des retours client. Pour l’instant, vos rôles ou utilisateurs IAM doivent opter pour le paramètre de compte awsvpcTrunking pour bénéficier des avantages d’une densité de tâches accrue par instance de conteneur.

Activer le trunking

Activez la fonctionnalité ECS elastic network interface trunking pour augmenter le nombre d’interfaces réseau pouvant être attachées aux types d’instance de conteneur EC2 prises en charge. Vous devez remplir les conditions préalables suivantes avant de pouvoir lancer une instance de conteneur avec les limites d’interface réseau accrues :

  • Votre compte doit avoir le rôle lié au service AWSServiceRoleForeECS pour ECS.
  • Vous devez choisir le paramètre de compte awsvpcTrunking.

S’assurer que le rôle lié au service existe pour ECS

Un rôle lié à un service est un type unique de rôle IAM lié à un service AWS (tel qu’ECS). Ce rôle vous permet de déléguer les autorisations nécessaires pour appeler d’autres services AWS en votre nom. Etant donné que ECS est un service qui gère les ressources en votre nom, vous avez besoin de ce rôle pour continuer. Dans la plupart des cas, vous n’aurez pas à créer un rôle lié au service. Si vous avez créé ou mis à jour un cluster ECS, ECS a probablement créé le rôle lié au service pour vous. Vous pouvez confirmer que votre rôle lié au service existe à l’aide de l’interface de ligne de commande AWS, comme illustré dans l’exemple de code suivant :

$ aws iam get-role --role-name AWSServiceRoleForECS
{
    "Role": {
        "Path": "/aws-service-role/ecs.amazonaws.com/",
        "RoleName": "AWSServiceRoleForECS",
        "RoleId": "AROAJRUPKI7I2FGUZMJJY",
        "Arn": "arn:aws:iam::226767807331:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
        "CreateDate": "2018-11-09T21:27:17Z",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "ecs.amazonaws.com"
                     },
                     "Action": "sts:AssumeRole"
                 }
              ]
            },
            "Description": "Role to enable Amazon ECS to manage your cluster.",
            "MaxSessionDuration": 3600
      }
}

Si le rôle lié au service n’existe pas, créez-le manuellement à l’aide de la commande suivante :

$ aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

Pour plus d’informations, voir Using Service-Linked Roles for Amazon ECS.

Choix de la fonctionalité awsvpcTrunking au niveau du compte global AWS

Votre compte, utilisateur IAM ou rôle doit se connecter au paramètre de compte awsvpcTrunking. Sélectionnez ce paramètre à l’aide de l’interface en ligne de commande AWS ou de la console ECS. Vous pouvez valider ce choix pour tout un compte en faisant d’awsvpcTrunking son paramètre par défaut. Vous pouvez également activer ce paramètre pour le rôle associé au profil d’instance avec lequel l’instance démarre. Pour obtenir des instructions, voir Account Settings.

Autres considérations

Après avoir rempli les conditions préalables décrites dans les sections précédentes, lancez une nouvelle instance de conteneur avec des limites d’interface réseau accrues à l’aide de l’un des types d’instance EC2 pris en charge. Gardez à l’esprit les points suivants :

  • Cela n’est disponible uniquement qu’avec la dernière version de l’AMI ECS-optimized.
  • Cela n’affecte que la création de nouvelles instances de conteneur après avoir opté pour awsvpcTrunking.
  • Cela n’affecte que les tâches créées avec le mode réseau awsvpc et le type de lancement EC2. Les tâches créées avec le type de lancement AWS Fargate disposent toujours d’une interface réseau dédiée, quel que soit le nombre de lancements

Pour plus de détails, voir ENI Trunking Considerations.

Résumé

Si vous souhaitez optimiser l’utilisation de vos instances de conteneur Amazon EC2 pour les clusters que vous gérez, activez la fonctionnalité de densité d’interface réseau accrue avec awsvpcTrunking. En suivant les étapes décrites dans cet article, vous pouvez lancer des tâches en utilisant beaucoup moins d’instances EC2. Ceci est particulièrement utile si vous adoptez une architecture de microservices, avec son nombre croissant de tâches plus légères. Espérons que vous avez trouvé cet article informatif et la solution proposée intéressante. Comme toujours, AWS encourage vos retours ou commentaires.

 

Post original contribué par Tony Pujals, Senior Developer Advocate.

Traduit de l’anglais par Patrick Madec, Solution Architect pour les partenaires AWS français.

Source