Ir para o conteúdo

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).

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

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

Observação: Se você usar o Agendador de instâncias para instâncias do Amazon EC2 com um Amazon Elastic Block Store (Amazon EBS) criptografado, suas instâncias não poderão ser iniciadas. É necessário adicionar a política de chave à chave do AWS Key Management Service (AWS KMS) para permitir que o perfil de usuário de chave use essa chave.

Instale o Agendador de instâncias

Instale o Agendador de instâncias. Em seguida, 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 Agendador de instâncias

Para implantar uma função do AWS Lambda, uma tabela do Amazon DynamoDB, uma regra do Amazon EventBridge e as métricas personalizadas do Amazon CloudWatch, conclua as seguintes etapas:

  1. Abra o Console de gerenciamento da AWS.
  2. Abra o console do CloudFormation com o modelo do Agendador de instâncias. Por padrão, o modelo é executado na região leste dos EUA (norte da Virgínia). Ou vá para a página Etapa 1. Executar a pilha de hubs do agendador de instâncias e selecione Iniciar solução.
    Na barra de navegação, selecione a região da AWS em que você deseja executar sua pilha com o modelo e, em seguida, clique em Próximo.
    Em Nome da pilha, nomeie sua pilha.
    Em TagName do Agendador de instâncias, é possível manter o valor padrão como Schedule ou personalizá-lo.
    Em Frequência, escolha uma frequência em minutos para executar seu agendador. 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, será possível ajustar a propriedade Frequência posteriormente.
    Em Ativar CloudWatch Metrics, selecione Sim.
    Em Ativar o CloudWatch Logs, selecione Sim.
    (Opcional) Em Tags iniciadas, insira state=started.
    (Opcional) Em Tags paradas, insira state=stopped.
    Para programação entre contas, forneça o parâmetro Perfis entre contas. Insira os nomes do recurso da Amazon (ARNs) para cada perfil das contas secundárias separados por vírgulas. Se você não estiver usando a programação entre contas, deixe o parâmetro em branco.
  3. Selecione Próximo.
  4. Na página Opções, selecione Próximo.
  5. Consulte suas configurações e selecione Eu reconheço que o AWS CloudFormation pode criar recursos do IAM.
  6. 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 Horários de início e término.

Use a CLI do Agendador de instâncias

Conecte-se à CLI do Agendador de instâncias e, em seguida, execute os seguintes comandos create-period da AWS CLI:

$ scheduler-cli create-period --stack your_stack_name --region aa-example-1 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri    
$ scheduler-cli create-period --stack your_stack_name --region aa-example-1 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

Observação: Substitua your_stack_name pelo nome da pilha escolhida na etapa 2 e aa-example-1 pela sua região.

Use o console do DynamoDB

Para criar períodos, conclua as seguintes etapas:

  1. Abra o console do DynamoDB.
  2. Selecione Tabelas e, em seguida, selecione a tabela de configuração.
    Observação: O modelo do Agendador 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 cronogramas 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 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. Substitua seg-sex-9-5 pelo nome do seu período, 9:00 pela sua hora de início e 16:59 pela sua hora de término.

Crie um cronograma

Para criar um cronograma, é possível usar a CLI do Agendador de instâncias, o console do DynamoDB ou recursos personalizados.

Use a CLI do Agendador de instâncias

Para criar um cronograma, execute o seguinte comando create-schedule da CLI:

$ scheduler-cli create-schedule --stack your_stack_name --name m-f9-5-sat9-12 --region aa-example-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

Observação: Substitua your_stack_name pelo nome da sua pilha, aa-example-1 pela sua região e seg-sex-9-5,sab-9-12 pelo seu cronograma.

Use o console do DynamoDB

Para criar um cronograma, conclua as seguintes etapas:

  1. Abra o console do DynamoDB.
  2. Selecione Tabelas e, em seguida, selecione 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 o cronograma

Instâncias de tags

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

O Agendador de instâncias monitora as tags nas instâncias. Se a chave da tag da instância corresponder à tag definida do agendador, o Agendador de instâncias aplicará o cronograma definido para o valor da tag da instância. Por exemplo, a chave de uma tag é definida como Schedule e o valor é definido como s-s9-5-sab9-12. Nesse 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. Se você iniciar manualmente as instâncias fora do período de execução, o Agendador de instâncias não interromperá a execução das instâncias. O Agendador de instâncias também não inicia uma instância se você a interromper manualmente durante o período de execução, a menos que você imponha o cronograma. Para obter mais informações, consulte Definições de cronograma.

Use cronogramas predefinidos

Além dos cronogramas personalizados, também é possível usar qualquer um dos cronogramas predefinidos da tabela de configuração. As etapas a seguir testam o cronograma predefinido chamado 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. Clique em Salvar.
  8. Atualize o console do Amazon EC2 e aguarde até que a função do Lambda seja iniciada.
    Observação: Se a função do Lambda for iniciada e executada sem erros, o Estado da instância será exibido como em execução. Isso depende do cronograma que você está testando. No console do CloudWatch, é possível verificar as métricas do CloudWatch para invocações e erros do Lambda.
  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.
    Importante: Podem ser cobrados custos adicionais com base na frequência e duração da função do Lambda que você usar. Também podem ser cobrados custos adicionais pelas tabelas do DynamoDB ou pelas regras do EventBridge que você criar.

Cronogramas entre contas

Para programar instâncias em contas secundárias usando o Agendador de instâncias, implante o modelo aws-instance-scheduler-remote do CloudFormation. Esse modelo cria o perfil que permite que o Agendador 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 Agendador de instâncias com o parâmetro correto.

Para executar a pilha remota em contas secundárias, conclua as seguintes etapas:

  1. Abra o Console de gerenciamento da AWS da conta secundária e execute o modelo do CloudFormation aws-instance-scheduler-remote. Também é possível baixar o modelo para uso futuro.

    Observação: Por padrão, o modelo é executado na região leste dos EUA (norte da Virgínia).

  2. Na barra de navegação, selecione a região em que você deseja executar sua pilha com o modelo e, em seguida, clique em Próximo.

  3. Na página Selecionar modelo, verifique se você selecionou o modelo correto e, em seguida, clique em Próximo.

  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 de conta da conta principal.

  6. Selecione Próximo.

  7. Na página Opções, selecione Próximo.

  8. Consulte 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 clique em Atualizar.

  12. Na página Atualizar pilha, selecione Usar modelo atual.

  13. No parâmetro Perfis entre contas, cole o valor CrossAccountRole.

  14. Selecione Próximo e, em seguida, selecione Eu reconheço que o AWS CloudFormation pode criar recursos do IAM.

  15. Selecione Atualizar pilha.

AWS OFICIALAtualizada há 10 meses