Existe uma maneira fácil de iniciar e interromper instâncias do AWS EC2 em um determinado horário todos os dias? Isso poderia me economizar muito dinheiro para meus servidores de desenvolvimento e teste.
Existe uma maneira fácil de iniciar e interromper instâncias do AWS EC2 em um determinado horário todos os dias? Isso poderia me economizar muito dinheiro para meus servidores de desenvolvimento e teste.
Atualizar
A AWS lançou uma ferramenta chamada " Instance Scheduler ", incluindo um guia de configuração completo que está vinculado a essa página. Parece ser um aprimoramento do Agendador do EC2 que descrevo abaixo, com mais alguns recursos, mas é essencialmente a mesma coisa.
O guia abaixo ainda funcionará, mas provavelmente é melhor examinar o agendador de instâncias para novas instalações.
Postagem original
A AWS tem uma ferramenta chamada EC2 Scheduler que oferece um controle muito flexível sobre como iniciar e interromper instâncias do EC2.
A ferramenta permite que você defina os horários de início e término padrão ao configurar a ferramenta, que você pode alterar posteriormente. Você pode escolher quais instâncias serão controladas e especificar diferentes horários de início e término para cada instância usando tags.
Embora seja uma ótima ferramenta, a documentação é um pouco vaga e confusa. É como se a documentação tivesse sido escrita por um engenheiro que escreveu a ferramenta e sabe tudo sobre ela, ao invés de um redator técnico.
Nota : se você tiver comentários ou correções, comentários são apreciados. Se você tiver uma pergunta baseada nisso, comece sua própria pergunta.
O que é o Agendador EC2
Essa ferramenta é uma função Lambda que funciona com Cloudwatch Events e DynamoDB. Ele é implantado usando um modelo do Cloudformation, que também configura as funções e políticas do IAM necessárias. Você pode ler sobre a arquitetura aqui .
Implantação
Comece indo para esta página e clicando em "lançar solução". No momento, o link direto está aqui , mas pode mudar.
Selecione a região na qual você deseja que os recursos sejam implantados na parte superior do console. O script controla instâncias do EC2 em qualquer região, mas é executado em uma região.
Como marcar instâncias do EC2
Isso é abordado na documentação aqui , mas não é tão simples quanto poderia ser.
Você controla quais instâncias são iniciadas e interrompidas marcando suas instâncias.
O caso mais simples exige que você marque cada instância do EC2 que deseja iniciar e parar de acordo com o agendamento. Para fazer isso, encontre sua instância do EC2 no console, clique em tags e crie esta tag
Para habilitar copiar e colar:
Se você quiser que uma instância específica seja iniciada e interrompida em uma programação diferente, anexe informações adicionais à chave e ao valor da tag. Por exemplo, se você quiser que uma instância comece às 1500 UTC e pare às 2400 UTC na terça, quinta e sexta-feira, insira o seguinte.
Chave: agendador:ec2-startstop:late Valor: 1500;2400;utc;tue,thu,fri
Observe que a palavra "atrasado" pode ser qualquer string, "atrasado" não tem significado especial.
Você pode converter UTC para sua hora local usando esta ferramenta .
Você pode usar o editor de tags para instâncias de tags em massa. Isso pode permitir que você configure a marcação em massa com mais facilidade, o que pode ser útil para ter configurações diferentes para desenvolvimento, teste e produção. Eu duvido que você usaria isso na produção.
Parâmetros do CloudFormation
Ao executar o modelo do CloudFormation, você precisa inserir muitos parâmetros. A maioria você pode deixar no padrão. Aqui estão alguns dos parâmetros mais importantes
Permissões, políticas e funções
A seção Permissões/função do IAM do modelo do CloudFormation é uma pista falsa - ou seja, é amplamente irrelevante. Ele especifica apenas o papel usado para executar o script do CloudFormation, não faz diferença para os recursos criados ou o papel usado quando a função lambda é executada. Em retrospecto, isso é óbvio, mas não era óbvio para mim quando comecei.
Seja qual for a função que você executa este script, a mesma função e as permissões em linha são criadas no IAM. A função do Lambda é executada usando uma "função de agendador ec2" que o script cria.
Incluí minhas políticas abaixo caso sejam úteis para alguém.
Eventos e métricas do CloudWatch
Se você quiser ver os logs da sua função Lambda, acesse Cloudwatch Events. O registro é muito bom. Também existem métricas, para que você possa ver quando é executado, o tempo em que é executado etc.
Adicional
O código para a função lambda está disponível no Github .
Políticas
Estes geralmente não são necessários, mas podem ser para alguém, então vou incluí-los.
Política para função do IAM
Política de confiança para o papel do IAM
Se você deseja apenas iniciar e parar instâncias, aqui está outra versão que também faz uso do serviço Lambda. Ele pressupõe que você deseja controlar um id de instância específico. Você pode controlar várias instâncias adicionando mais IDs separados por uma vírgula. (ex: 'i-3453453','i-45656745'). Você pode encontrar o id de sua instância na seção Instâncias do console AWS.
No console do Lambda
Código abaixo
Código abaixo
Lembre-se de substituir os valores de região e instância pelos seus próprios.
Código abaixo
Agende as funções
Aqui você criará um evento do CloudWatch que acionará sua função Lambda à noite
Nota: As expressões Cron são avaliadas em UTC. Certifique-se de ajustar a expressão para seu fuso horário preferido. Aqui está um exemplo que executará a função todos os dias às 08:00 GMT/UTC):
Para reiniciar suas instâncias pela manhã, repita essas etapas e use o horário de início de sua preferência. Se você quiser enviar uma mensagem de correio sempre que as funções falharem, você pode configurar um tópico SNS e configurar o envio dessa mensagem em Depuração na Janela de Criação de Função do Lmbda.
A fonte de tudo isso pode ser encontrada aqui: Documentação da AWS
Uma maneira mais fácil de atingir o mesmo objetivo é usar as regras do AWS EventBridge.
Vá para Amazon EventBridge > Regras
Crie uma nova regra e selecione Tipo de regra como Agenda .
Forneça a expressão cron para agendamento de desligamento da instância. Por ex. cron(30 17 * * ? *)
Para Target1 , selecione:
Revise os detalhes da programação e da instância e conclua a criação da regra.
Você pode usar o método mencionado acima (usando lambda) para iniciar a mesma instância novamente.