Le 20 décembre 2024, j'ai développé et publié un outil CLI appelé ecstop qui "arrête rapidement les ressources ECS en masse".
https://github.com/t-kikuc/ecstop
Le nom ecstop est une combinaison de ECS Stop. Je le prononce comme "ee-c-stop".
Dans cet article, je présenterai la présentation, la philosophie et les perspectives d'avenir d'ecstop.
J'ai souvent créé des ressources ECS lors du test d'ECS lui-même ou du développement/test de PipeCD.
Étant donné qu'ECS facture l'exécution des tâches et des instances de conteneur, je voulais arrêter celles inutilisées.
Comme c'est à des fins de tests, je ne souhaitais pas supprimer de clusters ou de services. Ils sont gratuits.
Cependant, comme j'avais créé de nombreuses ressources, il était difficile de les arrêter une par une depuis la console AWS.
Pour arrêter un service depuis la console, vous devez vous rendre sur la console ECS, sélectionner le service et "mettre à jour", définir le nombre de tâches à 0 et "confirmer la mise à jour" pour chaque service.
Les outils IaC et de déploiement sont conçus pour une utilisation en production et nécessitent des modifications minutieuses des fichiers de configuration, ce qui ne convient pas pour « arrêter rapidement plusieurs ressources ».
J'utilisais des scripts shell/Go pour les arrêter en masse, mais j'oubliais souvent comment les appeler.
Par conséquent, j'ai décidé de créer un outil CLI approprié.
Vous pouvez installer ecstop avec la commande suivante (Homebrew) :
$ brew install t-kikuc/tap/ecstop
Pour activer la saisie semi-automatique, veuillez vous référer à ici.
Pour plus de détails sur les options, veuillez vous référer au README.
$ ecstop services --cluster xxx
Cela définit le nombre souhaité de tous les services du cluster xxx sur 0. Cela arrête également automatiquement les tâches liées aux services.
$ ecstop tasks --cluster xxx --standalone
L'indicateur --standalone arrête les tâches qui ne sont pas liées aux services.
Cela s'applique aux tâches dont le préfixe de groupe n'est pas service :.
Pour arrêter les tâches liées aux services, utilisez plutôt les services ecstop car les services peuvent démarrer de nouvelles tâches même après s'être arrêtés par les tâches ecstop.
$ ecstop instances --cluster xxx
Cela arrête (≠ Termine) toutes les instances de conteneur liées au cluster xxx.
$ ecstop all --cluster xxx
Cette commande est équivalente à :
$ brew install t-kikuc/tap/ecstop
ecstop ne supprime pas les images ECR ou les définitions de tâches inutiles.
Bien que les tâches et les instances de conteneur (EC2) aient des coûts d'exploitation élevés, les images ECR sont relativement peu coûteuses et les définitions de tâches sont gratuites, je les ai donc ignorées. Les services et les clusters eux-mêmes sont également gratuits, ils ne sont donc pas supprimés.
Pour cette raison, je n'ai pas inclus « nettoyer » ou « supprimer » dans le nom de l'outil.
Dans les cas où « Je souhaite le supprimer car il n'est pas utilisé et c'est une horreur », il est plus facile de sélectionner plusieurs éléments dans la console AWS et de les supprimer après jugement humain.
De plus, pour nettoyer les images ECR, il est bon d'utiliser un outil appelé ecrm créé par fujiwara-san.
https://github.com/fujiwara/ecrm
J'ai minimisé les options de sélection pour "quelles ressources arrêter".
La console AWS est suffisante pour arrêter des ressources individuelles, et dans un environnement de test (pas de staging, etc.), il ne devrait y avoir aucune ressource qui "ne doit absolument pas être arrêtée". Surtout la nuit, arrêtons-les.
ecstop est basé sur une pile de développement Go CLI typique.
C'était la première fois que je publiais un outil CLI, et j'ai beaucoup appris, notamment comment définir la philosophie.
Si vous avez des commentaires ou des demandes, veuillez me le faire savoir sur https://github.com/t-kikuc/ecstop.
En fait, je développe un autre outil CLI lié au déploiement externe ECS, que je prévois de publier bientôt.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!