Stoßen Sie an Grenzen, sobald mehr als ein paar Tasks pro ECS-Host laufen sollen? Dann lesen Sie weiter – mit einem einfachen Kniff lässt sich die Anzahl der ausführbaren ECS-Tasks deutlich erhöhen.
Hintergrund
In der Standardkonfiguration von ECS auf EC2 ist die Anzahl der ECS-Tasks pro Node begrenzt. Das genaue Limit hängt vom verwendeten Instance-Typ ab. Der Grund: Jeder Task benötigt ein eigenes Elastic Network Interface (ENI), und genau das deckelt die maximale Anzahl an Tasks pro Instance.
ENI Trunking schafft Abhilfe
Mit ENI Trunking (über die Account-Einstellung awsvpcTrunking) lassen sich deutlich mehr Tasks pro Host betreiben. Das primäre ENI übernimmt dabei die Host-Kommunikation, während zusätzliche ENIs für das Trunking zugewiesen werden. Diese werden als Branch Interfaces bis zur Höchstgrenze des jeweiligen Instance-Typs ergänzt.
Nehmen wir den weit verbreiteten Node-Typ r5.xlarge: Standardmäßig unterstützt er drei Tasks – mit aktiviertem ENI Trunking sind es bis zu 20. (Referenztabelle der maximalen Tasks pro Instance-Typ.)
Trunking für einen bestehenden Cluster aktivieren
Beim Anlegen eines neuen ECS-Clusters lässt sich Trunking problemlos aktivieren. Doch wie geht man vor, wenn ein bestehender Cluster nachträglich umgestellt werden soll?
Prüfen Sie zunächst mit folgendem Befehl, ob Trunking bereits aktiv ist. Ausführen können Sie ihn in CloudShell oder über eine entsprechend konfigurierte CLI:
aws ecs list-attributes --target-type container-instance --attribute-name ecs.awsvpc-trunk-id --cluster <Cluster Name> --region <Region>
Wird eine leere Attributliste zurückgegeben, ist Trunking für den angegebenen Cluster nicht aktiviert.
Was Sie beim Trunking beachten sollten
Bevor Sie Trunking aktivieren, lohnt sich ein Blick in die AWS-Dokumentation, in der die Einschränkungen aufgeführt sind.
Die wichtigsten Punkte beim Einsatz von ENI Trunking:
- Es wird ausschließlich der Netzwerkmodus awsvpc unterstützt.
- Als Launch Type ist EC2 erforderlich (Fargate benötigt dieses Feature nicht, da dort standardmäßig jedem Task ein dediziertes ENI zugewiesen wird).
- Shared Networks werden nicht unterstützt.
- Windows-Container werden nicht unterstützt.
- Die Service-Linked Role muss vorhanden sein (wird beim Anlegen eines ECS-Clusters automatisch erstellt).
- Ressourcenbasierte IPv4-DNS-Anfragen (A-Records) dürfen nicht aktiviert sein (Standardeinstellung beim Erstellen von EC2-Instanzen).
So aktivieren Sie Trunking
Wenn Sie Trunking für einen bestehenden Cluster über die AWS Web Console aktivieren, zeigt die Oberfläche zwar an, dass es aktiv ist – der Befehl aws ecs list-attributes liefert in der Praxis aber häufig ein leeres Attribute-Array zurück. Das heißt: Trunking ist tatsächlich nicht aktiv.

AWS Console zeigt – möglicherweise fälschlicherweise – an, dass Trunking aktiviert ist
Falls dem so ist, können Sie Trunking für alle Cluster im Account mit folgendem Befehl aktivieren:
aws ecs put-account-setting-default --name awsvpcTrunking --value enabled --region <Region>
Bei dieser Methode genügt es, den Standardwert pro Region einmalig für den Account zu setzen, da der Befehl die Default-Account-Einstellung für Trunking definiert.
Neue ECS-Instanzen übernehmen die geänderte Konfiguration automatisch; bereits laufende Instanzen starten Sie einfach neu. Bei einer Auto Scaling Group erhöhen Sie die Anzahl der bereitgestellten Instanzen und tauschen die Nodes nach und nach aus – so wird die Änderung unterbrechungsfrei wirksam.
Ob Trunking funktioniert, erkennen Sie an der Anzahl der Tasks pro Host oder indem Sie den Befehl aws ecs list-attributes erneut ausführen. Dieser sollte nun eine Liste der für Trunking aktivierten Interfaces zurückgeben – statt eines leeren Attribute-Arrays.
Sie kennen DoiT noch nicht? Dann sollten Sie uns unbedingt kennenlernen. Unser Team möchte mehr über Sie und Ihre Anforderungen im Cloud Engineering erfahren. Wir setzen ausschließlich auf erfahrene Senior Engineers und sind auf fortgeschrittene Cloud-Beratung, Architekturdesign und Debugging spezialisiert. Nehmen Sie Kontakt auf – wir freuen uns auf das Gespräch!