Como uso o Programador de Instâncias com o CloudFormation para agendar instâncias do EC2?

9 minuto de leitura
0

Quero usar o Programador de Instâncias da AWS com o AWS CloudFormation para programar instâncias do Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrição

Use modelos do CloudFormation para automatizar a implantação do Programador de Instâncias da AWS.

Importante: se você usar o Programador de Instâncias para instâncias do EC2 com um Amazon Elastic Block Store criptografado (Amazon EBS), suas instâncias não poderão ser iniciadas. Para iniciá-las, você deve conceder ao Programador de Instâncias uma função de usuário importante com uma política de chaves para criptografar ou descriptografar volumes do EBS. É necessário adicionar a política de chaves à chave do AWS Key Management Service (AWS KMS) para permitir que a função de usuário principal use essa chave.

Resolução

Instale o Programador de Instâncias

Se você ainda não tiver feito isso, siga as instruções para instalar a interface de linha de comando (CLI) do Programador de Instâncias.

Para verificar se a instalação foi bem-sucedida, execute o seguinte comando:

$ scheduler-cli --version

Criar uma pilha do CloudFormation com o modelo do Programador de Instâncias

A pilha implanta uma função do AWS Lambda, uma tabela do Amazon DynamoDB, uma regra do Amazon EventBridge e métricas personalizadas do Amazon CloudWatch.

  1. Abra o Console de Gerenciamento da AWS.
  2. Abra o CloudFormation com o modelo do Programador de Instâncias. Ou vá para a Etapa 1. Inicie a página de pilha do hub do programador de instâncias e selecione Iniciar solução.
    Observação: o modelo é lançado na região Leste dos EUA (Norte da Virgínia) por padrão.
  3. Na barra de navegação, selecione a região da AWS em que você deseja lançar sua pilha com o modelo e escolha Avançar.
  4. Em Nome da pilha, nomeie sua pilha.
  5. Para TagName do Programador de instâncias, você pode manter o valor padrão como Schedule ou personalizá-lo.
  6. Em Frequência, escolha uma frequência em minutos para executar seu programador. Por exemplo, você pode escolher 5 minutos.
    Observação: a frequência é o número de minutos que passam antes que o EventBridge inicie novamente a função Lambda para o Programador de Instâncias. Se você tiver um grande número de instâncias, use a frequência mais alta possível para evitar a limitação. Se a frequência não for suficiente para suas necessidades, você poderá ajustar a propriedade Frequência posteriormente.
  7. Para Habilitar métricas do CloudWatch, selecione Sim.
  8. Para Habilitar o CloudWatch Logs, selecione Sim.
  9. (Opcional) Em Tags iniciadas, insira state=started.
  10. (Opcional) Em Tags paradas, insira state=stopped.
  11. Para agendamento entre contas, forneça o parâmetro Funções entre contas. Insira os ARNs para cada função das contas secundárias, separados por vírgulas. Se você não estiver usando o agendamento entre contas, deixe o parâmetro vazio.
  12. Para todos os outros parâmetros, personalize a pilha de acordo com suas necessidades.
  13. Selecione Avançar.
  14. Na página Opções, selecione ** Avançar**.
  15. Analise suas configurações e selecione Eu reconheço que o AWS CloudFormation pode criar recursos do IAM.
  16. Selecione Criar.

Criar os períodos

Para criar períodos, você pode usar a CLI do Programador de Instâncias, o console do DynamoDB ou recursos personalizados. Para mais informações sobre períodos de tempo, consulte Horários de início e término.

O exemplo a seguir mostra como criar instâncias que:

  • começa às 9h e para às 17h de segunda a sexta-feira
  • começa às 9h e para às 12h no sábado

Neste exemplo, você deve criar dois períodos. Para seu próprio cenário, crie o número apropriado de períodos.

Usando a CLI do Programador de Instâncias

Conecte-se à CLI do Programador de Instâncias e execute os seguintes comandos:

$ scheduler-cli create-period --stack your\_stack\_name --region eu-west-1 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri  

$ scheduler-cli create-period --stack your\_stack\_name --region eu-west-1 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

Observação: substitua seu your_stack_name com o nome da pilha escolhida na etapa 4 e eu-west-1 por a sua região.
Usando o console do DynamoDB

  1. Abra o console do DynamoDB.
  2. Selecione Tabelas e, em seguida, escolha a tabela de configuração.
    **Observação:**o modelo do Programador de Instâncias cria automaticamente duas tabelas do DynamoDB: estado e configuração. A tabela de estados armazena o estado das instâncias que o modelo interrompe e inicia. A tabela de configuração permite programar os períodos e os horários de acordo com suas necessidades.
  3. Selecione Explorar itens da tabela.
  4. Selecione Criar item.
  5. Selecione a visualização JSON e, em seguida, use o seguinte modelo de notação de objeto JavaScript (JSON):
{  
  "type": {  
    "S": "period"  
  },  
  "name": {  
    "S": "mon-fri-9-5"  
  },  
  "begintime": {  
    "S": "9:00"  
  },  
  "endtime": {  
    "S": "16:59"  
  },  
  "weekdays": {  
    "SS": \[  
      "mon-fri"  
    \]  
  }  
}

Observação: o modelo JSON anterior cria o primeiro período. Use um modelo JSON similar para o segundo período. Certifique-se de editar os modelos de acordo com suas necessidades.

Criar uma programação

Para criar uma programação, você pode usar a CLI do Programador de Instâncias, o console do DynamoDB ou os recursos personalizados.

Usando a CLI do Programador de Instâncias

Execute o seguinte comando:

$ scheduler-cli create-schedule --stack your\_stack\_name --name m-f9-5-sat9-12 --region eu-west-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

Usando o console do DynamoDB

  1. Abra o console do DynamoDB.
  2. Selecione Tabelas e, em seguida, escolha a tabela de configuração.
  3. Selecione Explorar itens da tabela.
  4. Selecione Criar item.
  5. Selecione a visualização JSON e, em seguida, use o seguinte modelo JSON:
{  
  "type": {  
    "S": "schedule"  
  },  
  "name": {  
    "S": "m-f9-5-sat9-12"  
  },  
  "timezone": {  
    "S": "UTC"  
  },  
  "periods": {  
    "SS": \[  
      "mon-fri-9-5"  
    \]  
  }  
}

Marque a instância e teste a programação

Ao usar uma pilha do CloudFormation com o Programador de Instâncias, você deve definir o parâmetro TagName do Programador de Instâncias. O valor padrão para esse parâmetro é Schedule.

O Programador de Instâncias monitora as tags nas instâncias. Se a chave da tag da instância corresponder à tag definida do programador, o Programador de Instâncias aplicará a programação definida para o valor da tag da instância. Por exemplo, uma chave de tag é definida para Schedule e o valor é definido para m-f9-5-sat9-12. Neste exemplo, as instâncias começam às 9h e param às 17h de segunda a sexta-feira. As instâncias também começam às 9h e terminam às 12h no sábado.

Observação: as chaves e valores de tag diferenciam maiúsculas de minúsculas. O Programador de Instâncias não interrompe a execução de instâncias se elas forem iniciadas manualmente fora do período de execução. O Programador de Instâncias também não inicia uma instância se ela for interrompida manualmente durante o período de execução, a menos que a programação seja aplicada. Para mais informações, consulte Definições de programação.

Usar programações predefinidos

Além das programações personalizadas, também é possível usar qualquer uma das programações predefinidas da tabela de configuração. Por exemplo, as etapas a seguir testam a programação predefinida chamada running:

  1. Abra o console do Amazon EC2.
  2. Selecione as instâncias interrompidas que você deseja marcar.
  3. Selecione a visualização de tags e, em seguida, selecione Gerenciar tags.
  4. Selecione adicionar tag.
  5. Em Chave, insira Schedule.
  6. Em Valor, insira running.
  7. Selecione Salvar.
  8. Atualize o console do Amazon EC2 e aguarde até que a função Lambda seja iniciada.
    Observação: quando a função Lambda é iniciada e executada sem erros, o estado da instância é exibido como em running, dependendo da programação que você está testando. No console do CloudWatch, você pode verificar as métricas do Lambda em busca de invocações e erros.
  9. Abra o console do DynamoDB.
  10. Selecione Tabelas e, em seguida, selecione a tabela de estados.
  11. Selecione Explorar itens da tabela e confirme se a instância marcada foi iniciada. Os dados do estado são armazenados na tabela de estados.
    Importante: você pode cobrar custos adicionais com base na frequência e na duração da função Lambda que está usando. Você também pode cobrar custos adicionais pelas tabelas do DynamoDB ou pelas regras do EventBridge criadas.

Para programação entre contas: Iniciar a pilha remota em contas secundárias

Para programar instâncias em contas secundárias usando o Programador de Instâncias, implante o aws-instance-scheduler-remote, o modelo do CloudFormation. Esse modelo cria a função que permite que o Programador de Instâncias da conta principal gerencie instâncias na conta secundária.

Observação: você deve fornecer o ARN da função como um parâmetro para a pilha do Programador de Instâncias na conta principal. Certifique-se de criar ou atualizar sua pilha do Programador de Instâncias com o parâmetro correto.

  1. Abra o Console de Gerenciamento da AWS da conta secundária e inicie o modelo do CloudFormation aws-instance-scheduler-remote. Você também pode baixar o modelo para uso futuro.
    Observação: o modelo é lançado na região Leste dos EUA (Norte da Virgínia) por padrão.
  2. Na barra de navegação, selecione a região da AWS em que você deseja lançar sua pilha com o modelo e escolha Avançar.
  3. Na página Selecionar modelo, verifique se você selecionou o modelo correto e escolha Avançar.
  4. Na página Especificar detalhes, atribua um nome à sua pilha remota.
  5. Em Parâmetros, revise e modifique o parâmetro da conta primária. Insira o número da conta primária.
  6. Selecione Avançar.
  7. Na página Opções, selecione ** Avançar**.
  8. Analise suas configurações e selecione Eu reconheço que o AWS CloudFormation pode criar recursos do IAM.
  9. Selecione Criar.
  10. Selecione a guia de stack Outputs e, em seguida, copie o valor CrossAccountRole.
  11. Na conta primária, selecione sua pilha do CloudFormation e selecione Atualizar.
  12. Na página Atualizar pilha, selecione Usar modelo atual.
  13. No parâmetro Funções entre contas, cole o valor CrossAccountRole.
  14. Selecione Avançar e, em seguida, selecione Eu reconheço que o AWS CloudFormation pode criar recursos do IAM.
  15. Selecione Atualizar pilha.
AWS OFICIAL
AWS OFICIALAtualizada há um ano