Como posso reiniciar o servidor quando o HTTP parar de responder no AWS EC2

2

Eu tenho um servidor no Amazon EC2 e gostaria de reinicializá-lo sempre que ele parar de responder por solicitações HTTP. É uma única micro instância.

Eu estava pensando em usar o AWS Lambda, mas não consegui encontrar nenhum script (preferencialmente em Python). Eu também tentei usar a verificação de integridade do Route 53, mas é impossível vinculá-la ao alarme com a reinicialização do EC2 (porque as ações do EC2 não estão disponíveis nos alarmes de verificação de integridade).

Obrigado

    
por Koss645 23.10.2018 / 11:14

3 respostas

0

Eu mesmo resolvi, escrevi uma função lambda em Python e a executava a cada hora pelo agendador de eventos no AWS CloudWatch

import json
from botocore.vendored import requests
import boto3
import time

region = 'xx-xxxx-x'
instances = ['x-xxxxxxxxxxxx']
website = 'https://website.com/'
webstring = 'SearchText'

def lambda_handler(event, context):
    for i in range(0,3):
        if check_website():
            return 'Website OK'
        time.sleep(60)
    reboot_instance()
    return 'Restarted instances'


def check_website():
    r = requests.get(website)
    if webstring in r.text:
        return True
    else:
        return False

def reboot_instance():
    ec2 = boto3.client('ec2', region_name=region)
    ec2.reboot_instances(InstanceIds=instances)
    
por 23.10.2018 / 16:48
1

Se a instância parar de responder ao HTTP, ela provavelmente deixará de ser "saudável" e aparecerá como tal no CloudWatch - > Métricas - > EC2 - > Por métrica de instância - > i-1234abcd ...

Em seguida, encontre StatusCheckFailed e StatusCheckFailed_Instance e StatusCheckFailed_System e veja se eles mostram quando a instância pára de responder. Um deles deveria. Como alternativa, encontre outras métricas utilizáveis, talvez no namespace Route53 .

Depois de encontrar uma métrica adequada crie um Alarme clicando em Métricas Gráficas e depois na pequena "campainha" à direita.

Napróximacaixadediálogo,cliqueem+AçãodoEC2eselecioneReinicializarinstância.Talvezsejanecessárioajustaralgunsoutrosparâmetros,oqueprovavelmentelevaráalgumasiterações.

Concluído:)

Espero que ajude!

    
por 23.10.2018 / 12:21
0

Você precisa usar a API da AWS. Uma maneira seria usar o boto

Ou você pode usar algo mais de alto nível como o módulo Antivírus do EC_instance

Você poderia vincular isso a eventos de monitoramento de várias maneiras, de um simples trabalho cron a algo baseado em eventos, como uma instância Node-Red ou algo entre como um gatilho IFTT.

    
por 23.10.2018 / 11:35