詳細検索

Usando o AWS SDK para Ruby para verificar o status da sua instância EC2

Avatar
por maeno
3 min de leitura

Usando o AWS SDK para Ruby para verificar o status da sua instância EC2
Traduzido do 日本語 • Ver original

No lado da aplicação, há momentos em que você quer verificar o status operacional atual de qualquer instância AWS EC2 em tempo real. Por exemplo, ao iniciar ou parar uma instância EC2 de um aplicativo externo, você deve verificar o status operacional da instância e executar o próximo processo quando o status mudar.

No SDK do Ruby, você pode obter o status de uma instância EC específica usando o método 'client.describe_instance_status' da classe 'AWS::EC2'. Existem dois tipos de status de instância: 'system_status' e 'instance_status', e se quiser verificar o status operacional exato, precisa obter esses dois status. Além disso, é importante notar que, quando a instância é parada, o status não existe. Em outras palavras, se você executar o método 'client.describe_instance_status' em uma instância parada, não conseguirá recuperar o conteúdo do objeto 'instance_status_set' que armazena as informações de status, então, se você não codificar com base nisso, isso resultará em um erro de recuperação de status. Por exemplo, ao monitorar o status de uma instância parada, é necessário assumir inicialmente que não há status no objeto 'instance_status_set', já que a instância está parada. Além disso, é importante notar que a instância encerrada não tem um alvo para executar o método 'client.describe_instance_status'.

Agora, com base no que foi dito acima, criei um programa Ruby para verificar o status das instâncias do EC2.

chkins.rb
# Codificação: UTF-8
Exigir "AWS-SDK" 

Definitivamente check_instance_status

    ec2 = AWS::EC2.new( 
      :access_key_id => Params[:access_key_id],  
      :secret_access_key => Params[:secret_access_key],  
      :region => Params[:region]
    )

    AWS.memoize faz
      Status = []
      se ec2.instances[Params[:instance_id]].existe? 
        ec2info = ec2.client.describe_instance_status({ 'instance_ids' => [Params[:instance_id]] })
        Se ec2info.instance_status_set. vazio? 
          # a instância parou
          status < 'stopped'
          message = '%s has stopped'
        else
          ec2info.instance_status_set.map { |i| 
            sys_status = i.respond_to?(:system_status) ? i.system_status.details[0].status : nil
            ins_status = i.respond_to?(:instance_status) ? i.instance_status.details[0].status : nil
            status < sys_status < ins_status
          }
          if status.include?('passed')
            # instance is running
            message = '%s is running'

          elsif status.include?('initializing')
            # instance is initializing
            message = '%s is starting'

          else
            # otherwise
            message = '%s is unknown status'

          end
        end
      else
        # instance has terminated
        status < 'terminated'
        message = '%s has already terminated'
      end
      puts sprintf("#{message}. status: %s", "Instance: #{Params[:instance_id]}", status)
    end
end

begin
  # init
  Params = { 
    :access_key_id => ARGV[0],  
    :secret_access_key => ARGV[1],  
    :region => ARGV[2],  
    :instance_id => ARGV[3],  
    :timeout => ARGV[4].nil? ? 1 : ARGV[4].to_i
  }
  raise 'O parâmetro está faltando.' se Params.values.include? (nul)

  para i em 1..Params[:timeout] faça
    Sono 1 se eu > 1
    check_instance_status
  fim

resgate => e
  Coloca e
fim

Como argumento na execução do programa,

  • Chave de acesso AWS (obrigatória)
  • Chave de Acesso Secreto AWS (obrigatória)
  • Região (obrigatória)
  • ID de Instância (o ID da instância cujo status você deseja verificar)
  • Número de tempos (quantas vezes em 1 segundo) Opcional. Apenas uma vez quando omitido)

Se você passar para o cliente, ele monitorará o status da instância especificada com saída padrão por quase o mesmo número de tempos ≒ segundos.

Exemplo de execução:
$ rubi -Ku chkins.rb <AWSアクセスキー> <AWSシークレットキー> ap-sudeste-1 <インスタンスID> 10
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]
Exemplo: i-***** está em execução. Status: ["Aprovado", "Aprovado"]

Se o ID de instância especificado estiver em execução, os resultados acima são monitorados por cerca de 10 segundos.

  • Antes de executar, você precisa instalar o 'AWS SDK for Ruby' (versão 1).

Se você adicionar tarefas como enviar um e-mail quando um status específico for detectado, registrar o script launcher em 'cron' e executá-lo regularmente, talvez consiga monitorar o status operacional da instância sem depender do AWS CloudWatch.</インスタンスID></AWSシークレットキー></AWSアクセスキー>

Related Articles