Boa noite pessoal, tudo certo? Não sei se é algo que eu deveria fazer no console da AWS, mas não entendi como a instância de desenvolvimento será criada com um mínimo de 0 instâncias. Eu perdi alguma coisa? Valew pessoal!
Boa noite pessoal, tudo certo? Não sei se é algo que eu deveria fazer no console da AWS, mas não entendi como a instância de desenvolvimento será criada com um mínimo de 0 instâncias. Eu perdi alguma coisa? Valew pessoal!
Olá @Mateus Osmarin
Sua [Dúvida] e pergunta ficou muito sem compreendimento. Mas para executar uma instância é simples, tem documentações da aws, agora a tag se é ambiente de desenvolvimento você que defini o especie do ambiente. https://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/EC2_GetStarted.html
Boa tarde, tudo certo? Como eu havia marcado a aula em específico onde tinha ficado com a dúvida, pensei que o contexto estivesse mais claro. Mas vamos lá, na aula foi feita uma estrutura para ambientes de desenvolvimento e produção, utilizando launch template e autoscaling group. Estes são os blocos relevantes.
resource "aws_launch_template" "instance_template" {
image_id = "ami-007855ac798b5175e"
instance_type = var.instance_type
key_name = var.key_name
security_group_names = [var.security_group]
user_data = var.production ? filebase64("ansible.sh") : null
tags = {
Name = "Terraform Ansible Python"
}
}
resource "aws_autoscaling_group" "group" {
name = var.group_name
availability_zones = ["${var.aws_region}a", "${var.aws_region}b"]
min_size = var.min_instances
max_size = var.max_instances
launch_template {
id = aws_launch_template.instance_template.id
version = "$Latest"
}
target_group_arns = var.production ? [aws_lb_target_group.load_balancer_target[0].arn] : []
}
resource "aws_autoscaling_policy" "autoscaling_policy" {
name = "terraform-autoscaling-policy"
autoscaling_group_name = var.group_name
policy_type = "TargetTrackingScaling"
target_tracking_configuration {
predefined_metric_specification {
predefined_metric_type = "ASGAverageCPUUtilization"
}
target_value = 50
}
count = var.production ? 1 : 0
}
Para o ambiente de desenvolvimento, o módulo foi criado como
module "aws_dev" {
source = "../../infra"
aws_region = "us-east-1"
key_name = "iac-dev"
instance_type = "t2.micro"
security_group = "dev"
group_name = "dev"
min_instances = 0
max_instances = 1
}
O problema é, então, que com um mínimo de 0 instâncias, não vai ser criada nenhuma instância. Posteriormente, no Alura+, houve uma aula que tratava sobre suspensão automática das instâncais de desenvolvimento, dessa forma:
resource "aws_autoscaling_schedule" "turn_on" {
scheduled_action_name = "turn_on"
min_size = 0
max_size = 1
desired_capacity = 1
recurrence = "0 10 * * MON-FRI"
autoscaling_group_name = aws_autoscaling_group.group.name
}
resource "aws_autoscaling_schedule" "turn_off" {
scheduled_action_name = "turn_off"
min_size = 0
max_size = 1
desired_capacity = 0
recurrence = "0 21 * * MON-FRI"
autoscaling_group_name = aws_autoscaling_group.group.name
}
Isso resolve o problema para ligar e desligar a máquina nos horários configurados. Mas ainda me resta uma dúvida, como eu poderia iniciar essa instância em um momento fora do horário configurado?
Fala @Mateus Osmarin
Agora o entendimento foi compreendido, então segue algumas notas e fóruns:
AWS: https://docs.aws.amazon.com/solutions/latest/instance-scheduler-on-aws/solution-overview.html
Fóruns: https://serverfault.com/questions/867642/how-to-start-and-stop-aws-ec2-instance-based-on-a-time-based-schedule https://medium.com/@cristianlobomartin/start-and-stop-your-ec2s-on-a-schedule-a7a26cab38c https://www.stormit.cloud/blog/aws-instance-scheduler/
Terraform https://aembit.io/blog/using-terraform-to-configure-aws-to-periodically-start-an-ec2-instance https://medium.com/geekculture/terraform-setup-for-automatically-turning-off-ec2-instances-upon-inactivity-d7f414390800
Github https://gist.github.com/picadoh/815c11361d1a88419ea16b14fe044e85
--
Atenciosamente, Danilo O. Pinheiro CEO DevsFree & MasterMind Arquiteto De Software | Arquiteto De Soluções | Engenheiro de Nuvem | Arquiteto Corporativo De Software | Gerente de Projetos | Líder técnico | Arquiteto Tecnológico
Contato: +55 (11) 9 3259-8362 Gmail