web-dev-qa-db-fra.com

Service AWS Fargate: passer à zéro?

J'ai récemment migré une petite application Web vers AWS à l'aide de Fargate et Aurora Serverless. L'application ne reçoit pas beaucoup de trafic, mon objectif est donc de réduire les coûts pendant que personne ne l'utilise. Aurora Serverless semble le faire automatiquement pour moi du côté DB.

Cependant, j'ai du mal à trouver des ressources sur la façon de mettre à l'échelle un service Fargate à zéro.

Il y a un ALB en face et je sais que le nombre de demandes ALB peut être utilisé pour la mise à l'échelle ... donc idéalement quand il y a en moyenne 0 demande sur une période de 10 minutes par exemple, le service serait réduit à zéro tâches. Ensuite, lorsqu'une demande arrive, elle déclenche une mise à l'échelle d'une tâche pour le service.

5
computmaxer

Je ne sais pas exactement comment cela fonctionnerait. Lorsqu'il n'y a pas de cibles ALB saines, l'ALB renvoie une erreur 503, vos visiteurs verront donc une page d'erreur à la place de votre site Web. Cela mai déclenche un démarrage de conteneur Fargate mais cela prend souvent des dizaines de secondes, parfois même plus d'une minute. Au moment où votre conteneur est en place, votre visiteur est probablement parti.

Si vous voulez un site Web véritablement sans serveur sans frais d'inactivité, vous devrez l'implémenter à l'aide de l'API.

  • Mettez vos fichiers frontend (HTML, CSS, JS) dans S3
  • Chargez votre contenu dynamique via [~ # ~] api [~ # ~]
  • Implémentez la fonctionnalité dynamique dans les fonctions Lambda
  • Utilisez passerelle API pour appeler les Lambdas
  • La base de données peut être Aurora Serverless ou DynamoDB On-Demand

Cette architecture ne coûte rien au repos et fournit une réponse instantanée à vos visiteurs.


Mise à jour: si vous souhaitez toujours réduire le service Fargate à 0 tâches, vous pouvez certainement le faire en définissant le DesiredCount du service sur 0. Cela peut être fait par exemple à travers aws-cli:

~ $ aws ecs update-service ... --service xyz --desired-count 0

Si vous voulez le faire dans Dev je vous suggère d'exécuter ceci UpdateService soit manuellement, soit à partir d'un cron-job, soit à partir d'une fonction Lambda planifiée. Dans les deux cas, vous pouvez définir la tâche sur 0 la nuit et retour à 1 le jour ouvrable suivant. Ce sera plus facile que de compter sur AutoScaling qui n'est peut-être pas aussi fiable pour un trafic très faible.

J'espère que cela pourra aider :)

7
MLu

Si la réécriture de votre application pour répondre à la réponse ci-dessus n'est pas une option ou coûteuse, vous pouvez vous pencher sur GCP CloudRun

CloudRun, ce sont des conteneurs sans serveur développés par GCP. Vous pouvez emballer votre site Web dans un conteneur, puis CloudRun ne vous facture que par utilisation du processeur lors des demandes et du démarrage. Il a même un très bon niveau gratuit qui rendra l'exécution de votre application à un coût minimum.

Vous pouvez donc combiner Amazon Aurora avec GCP CloudRun pour des coûts minimaux et pas besoin de réécrire votre application.

2
Jimmy