Skip to content

mikaelboto/aws_status_check_autoreboot-main

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

aws_status_check_autoreboot

Uma solução para identificar e reiniciar instâncias EC2 com erro de status check utilizando AWS Lambda e EventBridge

Você pode conferir o código fonte aqui:

Como funciona

Essa solução utiliza uma rule scheduled do EventBridge, que a cada 1 minuto, invoca uma função Lambda com python para varrer todas as instâncias EC2 de uma região, utilizando o método describe_instances e describe_instance_status para listar e identificar se passaram nos testes de acessibilidade e sistema. Caso algum dos testes falhe e a instância fique com status check 1/2 ou 0/2, o programa irá pausar a instância, aguardar até que o status seja "Stopped" e ligar a instância novamente.

Porquê não utilizar Cloudwatch alarms

Na maioria das vezes onde ocorre o erro de status check, a função de reboot não funciona. Sendo assim, seria necessário a criação de uma rotina baseada em eventos para encontrar uma determinada instância por id e por estado(dificulta a escala), aumentando assim a complexidade e encontrando limitações onde não poderia ter uma rotina de start/stop para reduzir custos, por exemplo.

Billing AWS Lambda X Cloudwatch alarms

Outro motivo para utilizar EventBridge + AWS Lambda é que você consegue consumir utilizando o free tier, ou seja, sem pagar nada. Caso sua conta passe do free tier, o custo será de aproximadamente 2 USD/month com 43200 invocações. Enquanto no Cloudwatch alarms, a criação da métrica deve ser individual, custando em torno de 0.30 USD/month por métrica.

Requisitos

Como utilizar o módulo

git clone https://github.com/chnacib/aws_status_check_autoreboot.git
cd aws_status_check_autoreboot/module

Edit terrafile.tf and replace variables in module

module "role" {
  source    = "../role"
  role_name = "lambda_status_check_role"
}

module "status_check_reboot_region1" {
  source        = "../"
  function_name = "status_check_reboot"
  region        = "sa-east-1"
  role_arn      = module.role.arn
  memory_size   = 128
}

Talvez você precise aumentar o memory_size dependendo da quantidade de instâncias EC2 em sua região, pois a lambda precisará de mais memória. para realizar a rotina

Deploy terraform module

terraform init
terraform apply -auto-approve

Requirements

Name Version
aws 4.40.0

Providers

Name Version
aws 4.40.0

Modules

Name Source Version
status_check_reboot ../ n/a

Resources

Name Type
aws_cloudwatch_event_rule.scheduler resource
aws_cloudwatch_event_target.lambda_target resource
aws_iam_role.iam_for_lambda resource
aws_iam_role_policy_attachment.attach_basic_lambda resource
aws_iam_role_policy_attachment.attach_ec2_lambda resource
aws_lambda_function.main resource
aws_lambda_permission.allow_cloudwatch resource

Inputs

Name Description Type Default Required
function_name Function name string n/a yes
region AWS Region string n/a yes

Outputs

No outputs.

Referências

https://docs.aws.amazon.com/

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages