Como uso o Programador de Instâncias com o CloudFormation para agendar instâncias do EC2?
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.
- Abra o Console de Gerenciamento da AWS.
- 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. - 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.
- Em Nome da pilha, nomeie sua pilha.
- Para TagName do Programador de instâncias, você pode manter o valor padrão como Schedule ou personalizá-lo.
- 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. - Para Habilitar métricas do CloudWatch, selecione Sim.
- Para Habilitar o CloudWatch Logs, selecione Sim.
- (Opcional) Em Tags iniciadas, insira state=started.
- (Opcional) Em Tags paradas, insira state=stopped.
- 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.
- Para todos os outros parâmetros, personalize a pilha de acordo com suas necessidades.
- Selecione Avançar.
- Na página Opções, selecione ** Avançar**.
- Analise suas configurações e selecione Eu reconheço que o AWS CloudFormation pode criar recursos do IAM.
- 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
- Abra o console do DynamoDB.
- 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. - Selecione Explorar itens da tabela.
- Selecione Criar item.
- 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
- Abra o console do DynamoDB.
- Selecione Tabelas e, em seguida, escolha a tabela de configuração.
- Selecione Explorar itens da tabela.
- Selecione Criar item.
- 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:
- Abra o console do Amazon EC2.
- Selecione as instâncias interrompidas que você deseja marcar.
- Selecione a visualização de tags e, em seguida, selecione Gerenciar tags.
- Selecione adicionar tag.
- Em Chave, insira Schedule.
- Em Valor, insira running.
- Selecione Salvar.
- 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. - Abra o console do DynamoDB.
- Selecione Tabelas e, em seguida, selecione a tabela de estados.
- 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.
- 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. - 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.
- Na página Selecionar modelo, verifique se você selecionou o modelo correto e escolha Avançar.
- Na página Especificar detalhes, atribua um nome à sua pilha remota.
- Em Parâmetros, revise e modifique o parâmetro da conta primária. Insira o número da conta primária.
- Selecione Avançar.
- Na página Opções, selecione ** Avançar**.
- Analise suas configurações e selecione Eu reconheço que o AWS CloudFormation pode criar recursos do IAM.
- Selecione Criar.
- Selecione a guia de stack Outputs e, em seguida, copie o valor CrossAccountRole.
- Na conta primária, selecione sua pilha do CloudFormation e selecione Atualizar.
- Na página Atualizar pilha, selecione Usar modelo atual.
- No parâmetro Funções entre contas, cole o valor CrossAccountRole.
- Selecione Avançar e, em seguida, selecione Eu reconheço que o AWS CloudFormation pode criar recursos do IAM.
- Selecione Atualizar pilha.
Vídeos relacionados

Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano