AWS Auto Scaling Group with create_before_destroy - timeout error

My terrafrom with autoscaling_group looks like this below.
My goal: application updates without downtime with only 1 EC2 instance.
Healtcheck shows that the new isntance is healthy: Everything works ok when it comes to updating ami, then launuch template and creating a new auto scaling group, deleting the old one and replacing ec2 in target groups.

Healtcheck shows that the new isntance is unhealthy: I wanted to see what happens if the new ami is damaged and healtcheck shows that the EC2 is unhealthy. Result: terrafrom terminates after timeout with error:

timeout while waiting for state to become 'ok' (last state: 'want at least 1 healthy instance(s) registered to Load Balancer, have 0', timeout: 5m0s)

This is still ok but worst of all it leaves behind a new ASG and EC2 created, which I have to clean manually.
Is there any way to check when executing terrafrom that the EC2 instance is still unhealthy after some time, abort its creation and destroy it?

resource "aws_launch_template" "foo" {

  name_prefix = "demo-app-${}"
  ebs_optimized = true
  image_id =
  instance_type = "t3.micro"

  iam_instance_profile {
    name =

  monitoring {
    enabled = true

  vpc_security_group_ids = []

  tag_specifications {
    resource_type = "instance"

    tags = {
      Name = "test"
  user_data = filebase64("")

  lifecycle {
    create_before_destroy = true

resource "aws_autoscaling_group" "worker" {
  name = "${}-asg-test3"

  min_size             = 1
  desired_capacity     = 1
  max_size             = 1
  min_elb_capacity     = 1
  wait_for_capacity_timeout = "5m"
  health_check_type    = "EC2"
  force_delete         = true
  vpc_zone_identifier  = module.vpc.private_subnets
  target_group_arns         = [aws_lb_target_group.main_tg.arn]

  launch_template {
    id      =
    version = "$Latest"

  lifecycle {
    create_before_destroy = true
    prevent_destroy       = false


I tried something like this inside the resource aws_autoscaling_group but it doesn’t work:

  provisioner "local-exec" {
    when = create
    command = "timeout 2m terraform destroy -target=aws_autoscaling_group.worker -auto-approve -force"