CLI do agendador - Agendador de instâncias na AWS

CLI do agendador

A interface de linha de comandos (CLI) do Agendador de instâncias na AWS permite que você configure agendamentos e períodos e estime a economia de custos para um determinado agendamento.

Pré-requisitos

A CLI nesta solução requer o Python 3.8+ e a versão mais recente do boto3.

Credenciais

Para usar a CLI do agendador, você deve ter credenciais para a AWS CLI. Para obter mais informações, consulte Configurações de arquivo de configuração e credenciais no Guia de usuário da AWS CLI.

Suas credenciais devem ter as seguintes permissões:

  • lambda:InvokeFunction - para invocar a função InstanceSchedulerMain na pilha do agendador e atualizar as informações de agendamento e período no banco de dados de configuração do agendador na linha de comandos

  • cloudformation:DescribeStackResource - para recuperar o ID do recurso físico da função do AWS Lambda da pilha para lidar com a solicitação da CLI

As solicitações feitas pela CLI do agendador e as respostas são registradas no fluxo de logs AdminCliRequestHandler-yyyymmdd.

nota

Se você especificar um perfil usando o argumento profile-name, o perfil especificado deverá ter essas permissões. Para obter mais informações sobre o argumento profile-name, consulte Argumentos comuns.

Instalar a CLI do agendador

  1. Baixe o pacote da CLI do agendador (instance_scheduler_cli.zip) e coloque-o em um diretório no computador.

    Importante

    A instalação falhará se você não colocar os arquivos em seu próprio diretório e, em seguida, instalá-los desse diretório.

  2. Descompacte o arquivo zip em seu próprio diretório (instance_scheduler_cli).

  3. Do mesmo diretório em que você colocou o pacote da CLI descompactado, instale o scheduler-cli em seu ambiente:

    nota

    O Scheduler-CLI requer Python 3.8 ou superior e as versões mais recentes de pip e boto3. Se você não tiver tudo isso instalado na máquina local, consulte a documentação oficial do pip para obter instruções de instalação antes de tentar instalar o Scheduler-CLI.

    pip install --no-index --find-links=instance_scheduler_cli instance_scheduler_cli
  4. Verifique se a instalação foi bem-sucedida com:

    scheduler-cli --help
nota

Se preferir, será possível instalar um sdist da CLI usando o mesmo processo descrito anteriormente.

Estrutura do comando

A CLI do agendador usa uma estrutura de várias partes na linha de comando. A próxima parte especifica o script do python da CLI do agendador. A CLI do agendador tem comandos que especificam as operações a serem executadas em períodos e agendamentos. Os argumentos específicos para uma operação podem ser especificados na linha de comando em qualquer ordem.

scheduler-cli <command> <arguments>

Argumentos comuns

A CLI do agendador tem suporte para os seguintes argumentos que todos os comandos podem usar:

Argumento Descrição

--stack [replaceable]<stackname>

O nome da pilha do agendador.

Importante: esse argumento é obrigatório para todos os comandos.

--region [replaceable]<regionname>

O nome da região em que a pilha do agendador é implantada.

Observação: você deve usar esse argumento quando a configuração padrão e os arquivos de credenciais não estão instalados na mesma região da pilha de soluções.

--profile-name [replaceable] <profilename>

O nome do perfil a ser usado para executar comandos. Se nenhum nome de perfil for especificado, o perfil padrão será usado.

--query

Uma expressão JMESPath que controla a saída do comando. Para obter mais informações sobre o controle de saída, consulte Controlar a saída do comando da AWS Command Line Interface no Guia do usuário da AWS CLI.

--help

Mostra comandos e argumentos válidos para a CLI do agendador. Quando usado com um comando específico, mostra subcomandos e argumentos válidos para esse comando.

--version

Mostra o número da versão da CLI do agendador.

Comandos disponíveis

create-period

Descrição

Cria um período. Um período deve conter pelo menos um dos seguintes itens: begintime, endtime, weekdays, months ou monthdays.

Argumentos

--name
  • O nome do período

    Tipo: String

    Obrigatório: Sim

--description
  • Uma descrição do período

    Tipo: String

    Obrigatório: Não

--begintime
  • O horário que o período de execução é iniciado. Se begintime e endtime não forem especificados, o período de execução será das 00:00 às 23:59.

    Tipo: String

    Restrições: formato H:MM ou HH:MM

    Obrigatório: Não

--endtime
  • O horário que o período de execução é interrompido. Se begintime e endtime não forem especificados, o período de execução será das 00:00 às 23:59.

    Tipo: String

    Restrições: formato H:MM ou HH:MM

    Obrigatório: Não

--weekdays
  • Os dias da semana do período

    Tipo: String

    Restrições: lista delimitada por vírgula de nomes de dia abreviados (seg) ou números (0). Use o meia-risca (–) para especificar um intervalo. Use a barra (/) para especificar cada n^ dia da semana.

    Obrigatório: Não

--months
  • Os meses do período

    Tipo: String

    Restrições: lista delimitada por vírgula de nomes de mês abreviados (jan) ou números (1). Use o meia-risca (–) para especificar um intervalo. Use a barra (/) para especificar a cada n^ mês.

    Obrigatório: Não

--monthdays
  • Os dias do mês do período

    Tipo: String

    Restrições: lista delimitada por vírgula de nomes de mês abreviados (jan) ou números (1). Use o meia-risca (–) para especificar um intervalo. Use a barra (/) para especificar cada n^ dia do mês.

    Obrigatório: Não

Exemplo

$ scheduler-cli create-period --name "weekdays" --begintime 09:00 --endtime 18:00 --weekdays mon-fri --stack Scheduler
{
   "Period": {
      "Name": "weekdays",
      "Endtime": "18:00",
      "Type": "period",
      "Begintime": "09:00",
      "Weekdays": [
         "mon-fri"
      ]
   }
    }

create-schedule

Descrição

Cria um agendamento.

Argumentos

--name
  • O nome do agendamento

    Tipo: String

    Obrigatório: Sim

--description
  • Uma descrição do agendamento

    Tipo: String

    Obrigatório: Não

--enforced
  • Impõe o estado agendado para a instância

    Obrigatório: Não

--use-metrics
  • Coleta métricas do Amazon CloudWatch

    Obrigatório: Não

--periods
  • Uma lista dos períodos de execução do agendamento. Se vários períodos forem especificados, a solução iniciará uma instância se um dos períodos for avaliado como true.

    Tipo: String

    Restrições: lista delimitada por vírgula de períodos. Use <period-name>@[replaceable]<instance type> para especificar um tipo de instância para um período. Por exemplo, weekdays@t2.large.

    Obrigatório: Sim

--retain-running
  • Impede que uma instância seja interrompida pela solução no final de um período de execução, se a instância tiver sido iniciada manualmente antes do início do período.

    Obrigatório: Não

--ssm-maintenance-window
  • Adiciona uma janela de manutenção do AWS Systems Manager como um período de execução a um agendamento de instâncias do Amazon EC2.

    Tipo: String

    Obrigatório: Não

--do-not-stop-new-instances
  • Não interrompa uma instância na primeira vez em que ela for marcada se estiver sendo executada fora de um período de execução.

    Obrigatório: Não

--timezone
  • O fuso horário a ser usado no agendamento.

    Tipo: matriz de strings

    Obrigatório: Não (se esse argumento não for usado, o fuso horário padrão da pilha de soluções principal será usado).

--use-maintenance-window
  • Adiciona uma janela de manutenção do Amazon RDS como período de execução a um agendamento de instância do Amazon RDS ou uma janela de manutenção do AWS Systems Manager como período de execução a um agendamento de instância do Amazon EC2.

    Tipo: true/false

    Obrigatório: Não (padrão: true)

Exemplo

$ scheduler-cli create-schedule --name LondonOfficeHours --periods weekdays,weekends --timezone Europe/London --stack Scheduler
{
   "Schedule": {
      "Enforced": false,
      "Name": "LondonOfficeHours",
      "StopNewInstances": true,
      "Periods": [
         "weekends",
         "weekdays"
      ],
      "Timezone": "Europe/London",
      "Type": "schedule"
   }
}

delete-period

--name
  • O nome do período aplicável

    Tipo: String

    Obrigatório: Sim

Importante

Se o período for usado em agendamentos existentes, você deverá removê-lo desses agendamentos antes de excluí-lo.

Exemplo

$ scheduler-cli delete-period --name weekdays --stack Scheduler
{
   "Period": "weekdays"
}

delete-schedule

Descrição

Exclui um agendamento existente.

Argumentos

--name
  • O nome do agendamento aplicável

    Tipo: String

    Obrigatório: Sim

Exemplo

$ scheduler-cli delete-schedule --name LondonOfficeHours --stack Scheduler
{
   "Schedule": "LondonOfficeHours"
}

describe-periods

Descrição

Lista os períodos configurados para a pilha do Agendador de instâncias.

Argumentos

--name
  • O nome de um período específico que você deseja descrever.

    Tipo: String

    Obrigatório: Não

Exemplo

$ scheduler-cli describe-periods --stack Scheduler
{
   "Periods": [
      {
         "Name": "first-monday-in-quarter",
         "Months": [
            "jan/3"
         ],
         "Type": "period",
         "Weekdays": [
            "mon#1"
         ],
         "Description": "Every first Monday of each quarter"
      },
      {
         "Description": "Office hours",
         "Weekdays": [
            "mon-fri"
         ],
         "Begintime": "09:00",
         "Endtime": "17:00",
         "Type": "period",
         "Name": "office-hours"
      },

      {
         "Name": "weekdays",
         "Endtime": "18:00",
         "Type": "period",
         "Weekdays": [
            "mon-fri"
         ],
         "Begintime": "09:00"
      },
      {
         "Name": "weekends",
         "Type": "period",
         "Weekdays": [
            "sat-sun"
         ],
         "Description": "Days in weekend"
      }
   ]
}

describe-schedules

Descrição

Lista os agendamentos configurados para a pilha do Agendador de instâncias.

Argumentos

--name
  • O nome de um agendamento específico que você deseja descrever.

    Tipo: String

    Obrigatório: Não

Exemplo

$ scheduler-cli describe-schedules --stack Scheduler

{
   "Schedules": [
      {
         "OverrideStatus": "running",
         "Type": "schedule",
         "Name": "Running",
         "UseMetrics": false
      },
      {
         "Timezone": "UTC",
         "Type": "schedule",
         "Periods": [
            "working-days@t2.micro",
            "weekends@t2.nano"
         ],
         "Name": "scale-up-down"
      },
      {
         "Timezone": "US/Pacific",
         "Type": "schedule",
         "Periods": [
            "office-hours"
         ],
         "Name": "seattle-office-hours"
      },
      {
         "OverrideStatus": "stopped",
         "Type": "schedule",
         "Name": "stopped",
         "UseMetrics": true
      }
   ]
}

describe-schedule-usage

Descrição

Lista todos os períodos em execução dentro de um agendamento e calcula as horas de cobrança das instâncias. Use esse comando para simular um agendamento para calcular possíveis economias e períodos de execução após criar ou atualizar um agendamento.

Argumentos

--name
  • O nome do agendamento aplicável

    Tipo: String

    Obrigatório: Sim

--startdate
  • A data de início do período usado para o cálculo. A data padrão é a data atual.

    Tipo: String

    Obrigatório: Não

--enddate
  • A data de término do período usado para o cálculo. A data padrão é a data atual.

    Tipo: String

    Obrigatório: Não

Exemplo

$ scheduler-cli describe-schedule-usage --stack InstanceScheduler --name seattle-office-hours
{
   "Usage": {
      "2017-12-04": {
         "BillingHours": 8,
         "RunningPeriods": {
            "Office-hours": {
               "Begin": "12/04/17 09:00:00",
               "End": "12/04/17 17:00:00",
               "BillingHours": 8,
               "BillingSeconds": 28800
            }
         },
         "BillingSeconds": 28800
      }
   },
   "Schedule": "seattle-office-hours"

update-period

Descrição

Atualiza um período existente.

Argumentos

O comando update-period é compatível com os mesmos argumentos do comando create-period. Para obter mais informações sobre os argumentos, consulte o comando create-period.

Importante

Se você não especificar um argumento, esse argumento será removido do período.

update-schedule

Descrição

Atualiza um agendamento existente.

Argumentos

O comando update-schedule é compatível com os mesmos argumentos do comando create-schedule. Para obter mais informações sobre os argumentos, consulte o comando create-schedule.

Importante

Se você não especificar um argumento, esse argumento será removido do agendamento.

help

Descrição

Exibe uma lista de comandos e argumentos válidos para a CLI do agendador.

Exemplo

$ scheduler-cli --help
usage: scheduler-cli [-h] [--version]
                     {create-period,create-schedule,delete-period,delete-schedule,describe-periods,describe-schedule-usage,describe-schedules,update-period,update-schedule}
                     ...

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit

subcommands:
  Valid subcommands

  {create-period,create-schedule,delete-period,delete-schedule,describe-periods,describe-schedule-usage,describe-schedules,update-period,update-schedule}
                        Commands help
    create-period       Creates a period
    create-schedule     Creates a schedule
    delete-period       Deletes a period
    delete-schedule     Deletes a schedule
    describe-periods    Describes configured periods
    describe-schedule-usage
                        Calculates periods and billing hours in which
                        instances are running
    describe-schedules  Described configured schedules
    update-period       Updates a period
    update-schedule     Updates a schedule

Quando usado com um comando específico, o argumento --help mostra subcomandos e argumentos válidos para esse comando.

Exemplo de comando específico

$ scheduler-cli describe-schedules --help
usage: scheduler-cli describe-schedules [-h] [--name NAME] [--query QUERY]
                                        [--region REGION] --stack STACK

optional arguments:
  -h, --help         show this help message and exit
  --name NAME        Name of the schedule
  --query QUERY      JMESPath query to transform or filter the result
  --region REGION    Region in which the Instance Scheduler stack is
                        deployed
  --stack STACK, -s STACK
                     Name of the Instance Scheduler stack