Como faço para usar o Programador de instâncias com o CloudFormation para programar 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 (Amazon EBS) criptografado, 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 principal com uma política de chave para criptografar ou descriptografar volumes do EBS. É necessário adicionar a política de chave à 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 comandos (CLI) do Programador de instâncias.

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

$ scheduler-cli --version

Crie 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 página Step 1. Launch the instance scheduler hub stack e selecione Iniciar solução.
    Observação: o modelo é executado 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 executar sua pilha com o modelo e, em seguida, escolha Avançar.
  4. Em Nome da pilha, nomeie sua pilha.
  5. Em 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 decorridos antes que o EventBridge inicie novamente a função do 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 o controle de utilização. Se a frequência não for suficiente para suas necessidades, você poderá ajustar a propriedade Frequência posteriormente.
  7. Em Habilitar métricas do CloudWatch, selecione Sim.
  8. Em Habilitar o CloudWatch Logs, selecione Sim.
  9. (Opcional) Em Tags iniciadas, insira state=started.
  10. (Opcional) Em Tags paradas, insira state=stopped.
  11. Para programação entre contas, forneça o parâmetro Funções entre contas. Insira os ARNs de cada função das contas secundárias, separados por vírgulas. Se você não estiver usando a programação 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.

Crie 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 obter mais informações sobre períodos de tempo, consulte Start and stop times.

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

  • comecem às 9h e parem às 17h de segunda a sexta-feira
  • comecem às 9h e parem às 12h no sábado

Neste exemplo, você deve criar dois períodos. Para sua própria situação, crie o número apropriado de períodos.

Como usar 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 pelo nome da pilha escolhida na etapa 4 e eu-west-1 pela sua região.
Como usar 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 estado armazena o estado das instâncias que o modelo interrompe e inicia. A tabela de configuração permite especificar os períodos e programações 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.

Crie uma programação

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

Como usar 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

Como usar 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 com tag 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, a chave de uma tag é definida como Schedule e o valor é definido como 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 os valores de tags 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 obter mais informações, consulte Schedule definitions.

Use programações predefinidas

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 com tag.
  3. Selecione a visualização 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 do Lambda seja iniciada.
    Observação: quando a função do Lambda é iniciada e executada sem erros, o Estado da instância é exibido como 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 com tag foi iniciada. Os dados do estado são armazenados na tabela de estados.
    Importante: podem ser cobrados custos adicionais com base na frequência e duração da função do Lambda que está usando. Também podem ser cobrados custos adicionais pelas tabelas do DynamoDB ou pelas regras do EventBridge criadas.

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

Para programar instâncias em contas secundárias usando o Programador de instâncias, implante o modelo aws-instance-scheduler-remote 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 aws-instance-scheduler-remote do CloudFormation. Você também pode baixar o modelo para uso futuro.
    Observação: o modelo é executado 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 executar sua pilha com o modelo e, em seguida, escolha Avançar.
  3. Na página Selecionar modelo, verifique se você selecionou o modelo correto e, em seguida, 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 principal. Insira o número da conta principal.
  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 Saídas da pilha e, em seguida, copie o valor CrossAccountRole.
  11. Na conta principal, 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