Cloud

Start/Stop ECS Fargate Tasks Usando Lambda & CloudWatch Events Rules

   Falaaaaa Dev´s, DevOps e SRE´s , quando o assunto é reduzir custos em cloud nas empresas cabeças podem rolar não é ? kkkk então pensando nisso, Criei uma função Lambda simples para poder iniciar/interromper tarefas do serviço ECS para um cluster específico, cluster estes que rodem em Desenvolvimento ou até mesmo em homologação que não precise está operando 24/7 consumindo horrores no bolso da empresa.  

   Essa função do Lambda será criada em Go, ou como alguns amam dizer Golang ;) e integrada com duas regras de eventos do CloudWatch, uma para iniciar as tarefas às 10h e outra para interromper todas as tarefas as meia-noite.  

   O código Lambda é o seguinte:  

 

 irá perceber que o código que estou implementando é bem simples, proposital para poder deixar o mais claro possível, pois é totalmente adaptável a validações de possíveis erros e pouco mais de complexidade e switch case, como a ideia aqui é ir direto ao ponto deixaremos desta forma rs.  

 Sobre a Lambda  

   recebe como entrada um evento com o seguinte json.  

   

que se referem aos nomes de cluster e serviço do ECS, enquanto status será o estado desejado para a task na regra do CloudWatch Events para definir se iniciar ou interromper as tarefas usando o parâmetro desejadoCount.  

   Veja como configurar a regra CloudWatch Events:  

cloudwatch events

   

Obs: Aproveitei uma imagem de outro artigo porém lembre-se de passar o json citado a cima para a função Lambda conforme o esperado pelo código:  

    {"cluster": "NomeDoClusterECS","service": "NomeDoService","status": "start ou stop"}  

 

Role/Policy no IAM  

   por fim, precisamos adicionar uma política IAM para permitir que a função Lambda atualize o serviço ECS, portanto, adicione a seguinte política em linha à função IAM anexada à sua função Lambda  

   

espero que ajude no seu dia a dia, e te faça economizar umas doletas na AWS ;)