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アクセスキー>