{"id":29943287,"url":"https://github.com/sourcefuse/terraform-aws-arc-ec2-autoscale-group","last_synced_at":"2026-02-08T12:07:14.713Z","repository":{"id":290767715,"uuid":"971402261","full_name":"sourcefuse/terraform-aws-arc-ec2-autoscale-group","owner":"sourcefuse","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-30T12:10:51.000Z","size":16621,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-08-01T05:55:58.743Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sourcefuse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-23T13:19:55.000Z","updated_at":"2025-04-30T12:10:34.000Z","dependencies_parsed_at":"2025-04-30T13:52:14.162Z","dependency_job_id":null,"html_url":"https://github.com/sourcefuse/terraform-aws-arc-ec2-autoscale-group","commit_stats":null,"previous_names":["sourcefuse/terraform-aws-arc-ec2-autoscale-group"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/sourcefuse/terraform-aws-arc-ec2-autoscale-group","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-ec2-autoscale-group","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-ec2-autoscale-group/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-ec2-autoscale-group/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-ec2-autoscale-group/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sourcefuse","download_url":"https://codeload.github.com/sourcefuse/terraform-aws-arc-ec2-autoscale-group/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-ec2-autoscale-group/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29229428,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T12:03:03.049Z","status":"ssl_error","status_checked_at":"2026-02-08T12:02:56.077Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-03T02:14:50.808Z","updated_at":"2026-02-08T12:07:14.707Z","avatar_url":"https://github.com/sourcefuse.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Module Structure](./static/asg-banner.png)\n\n# [terraform-aws-arc-ec2-autoscale-group](https://github.com/sourcefuse/terraform-aws-arc-ec2-autoscale-group)\n\n\u003ca href=\"https://github.com/sourcefuse/terraform-aws-arc-ec2-autoscale-group/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/release/sourcefuse/terraform-aws-arc-ec2-autoscale-group.svg?style=for-the-badge\" alt=\"Latest Release\"/\u003e\u003c/a\u003e \u003ca href=\"https://github.com/sourcefuse/terraform-aws-arc-ec2-autoscale-group/commits\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/sourcefuse/terraform-aws-arc-ec2-autoscale-group.svg?style=for-the-badge\" alt=\"Last Updated\"/\u003e\u003c/a\u003e ![Terraform](https://img.shields.io/badge/terraform-%235835CC.svg?style=for-the-badge\u0026logo=terraform\u0026logoColor=white) ![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge\u0026logo=githubactions\u0026logoColor=white)\n\n[![Quality gate](https://sonarcloud.io/api/project_badges/quality_gate?project=sourcefuse_terraform-aws-arc-ec2-autoscale-group\u0026token=d2a98006c7439f12118f086a79a8c2af526712ca)](https://sonarcloud.io/summary/new_code?id=sourcefuse_terraform-aws-arc-ec2-autoscale-group)\n\n[![Known Vulnerabilities](https://github.com/sourcefuse/terraform-aws-arc-ec2-autoscale-group/actions/workflows/snyk.yaml/badge.svg)](https://github.com/sourcefuse/terraform-aws-arc-ec2-autoscale-group/actions/workflows/snyk.yaml)\n\n## Overview\n\nSourceFuse's AWS Reference Architecture Terraform module leverages the terraform-aws-modules/terraform-aws-arc-ec2-autoscale-group GitHub repository to enable streamlined provisioning and management of EC2 Auto Scaling Groups. This module facilitates dynamic scaling of EC2 instances based on demand, ensuring high availability and cost efficiency for workloads. It supports customizable launch templates, instance profiles, and scaling policies, allowing flexible configuration tailored to diverse application needs. Integrated with CloudWatch monitoring and load balancing options, the module ensures resilient and performant infrastructure on AWS.\n\n### Prerequisites\nBefore using this module, ensure you have the following:\n\n- AWS credentials configured.\n- Terraform installed.\n- A working knowledge of Terraform.\n- Network\n\n\n## Getting Started\n\n1. **Define the Module**\n\nInitially, it's essential to define a Terraform module, which is organized as a distinct directory encompassing Terraform configuration files. Within this module directory, input variables and output values must be defined in the variables.tf and outputs.tf files, respectively. The following illustrates an example directory structure:\n\n\n```plaintext\nasg/\n|-- main.tf\n|-- variables.tf\n|-- outputs.tf\n```\n\n2. **Define Input Variables**\n\nInside the `variables.tf` or in `*.tfvars` file, you should define values for the variables that the module requires.\n\n3. **Use the Module in Your Main Configuration**\nIn your main Terraform configuration file (e.g., main.tf), you can use the module. Specify the source of the module, and version, For Example\n\n\n```hcl\nmodule \"asg\" {\n  source        = \"sourcefuse/arc-ec2-autoscale-group/aws\"\n  version       = \"0.0.1\"\n\n  launch_template                  = local.launch_template\n  asg                              = local.asg_config\n  security_group_data              = local.security_group_data\n  security_group_name              = local.security_group_name\n  vpc_id                           = data.aws_vpc.default.id\n  autoscaling_notification_enabled = local.autoscaling_notification_enabled\n  autoscaling_notification_types   = local.autoscaling_notification_types\n  autoscaling_sns_topic_arn        = local.autoscaling_sns_topic_arn\n  schedules                        = local.schedules\n  autoscaling_policy               = local.autoscaling_policy\n  predictive_scaling_configuration = local.predictive_scaling_configuration\n  create_autoscaling_attachment    = local.create_autoscaling_attachment\n  autoscaling_attachments          = local.autoscaling_attachments\n  instance_profile_name            = local.instance_profile_name\n  tags                             = module.tags.tags\n}\n```\n\n4. **Output Values**\n\nInside the `outputs.tf` file of the module, you can define output values that can be referenced in the main configuration. For example:\n\n```hcl\noutput \"name\" {\n  description = \"Name of the Auto Scaling Group\"\n  value       = module.asg.name\n}\n\noutput \"asg_arn\" {\n  description = \"ARN of the Auto Scaling Group\"\n  value       = module.asg.asg_arn\n}\n\n```\n\n5. **Execute Terraform Commands**\n\nAfter defining your main configuration, navigate to the directory containing your Terraform files and run the following commands:\n\n\n```bash\nterraform init\nterraform apply\n```\n\n6. **Review and Confirm**\n\nTerraform will display a plan showing the changes it intends to make. Review the plan and confirm by typing 'yes' when prompted.\n\n\u003c!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 1.5.0 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | ~\u003e 5.85 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | 5.96.0 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_arc_security_group\"\u003e\u003c/a\u003e [arc\\_security\\_group](#module\\_arc\\_security\\_group) | sourcefuse/arc-security-group/aws | 0.0.1 |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [aws_autoscaling_attachment.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_attachment) | resource |\n| [aws_autoscaling_group.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_group) | resource |\n| [aws_autoscaling_notification.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_notification) | resource |\n| [aws_autoscaling_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_policy) | resource |\n| [aws_autoscaling_schedule.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_schedule) | resource |\n| [aws_autoscaling_traffic_source_attachment.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_traffic_source_attachment) | resource |\n| [aws_iam_instance_profile.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_instance_profile) | resource |\n| [aws_iam_role.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_launch_template.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/launch_template) | resource |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_asg\"\u003e\u003c/a\u003e [asg](#input\\_asg) | Configuration map for Auto Scaling Group | \u003cpre\u003eobject({\u003cbr\u003e    name                      = optional(string)\u003cbr\u003e    min_size                  = number\u003cbr\u003e    max_size                  = number\u003cbr\u003e    desired_capacity          = optional(number)\u003cbr\u003e    desired_capacity_type     = optional(string)\u003cbr\u003e    vpc_zone_identifier       = optional(list(string))\u003cbr\u003e    availability_zones        = optional(list(string))\u003cbr\u003e    min_elb_capacity          = optional(number)\u003cbr\u003e    wait_for_elb_capacity     = optional(number)\u003cbr\u003e    wait_for_capacity_timeout = optional(string)\u003cbr\u003e    capacity_rebalance        = optional(bool)\u003cbr\u003e    context                   = optional(string)\u003cbr\u003e    placement_group           = optional(string)\u003cbr\u003e    health_check_type         = optional(string)\u003cbr\u003e    health_check_grace_period = optional(number)\u003cbr\u003e    protect_from_scale_in     = optional(bool)\u003cbr\u003e    default_cooldown          = optional(number)\u003cbr\u003e    default_instance_warmup   = optional(number)\u003cbr\u003e    force_delete              = optional(bool)\u003cbr\u003e    max_instance_lifetime     = optional(number)\u003cbr\u003e    metrics_granularity       = optional(string)\u003cbr\u003e    enabled_metrics           = optional(list(string))\u003cbr\u003e    termination_policies      = optional(list(string))\u003cbr\u003e    suspended_processes       = optional(list(string))\u003cbr\u003e    service_linked_role_arn   = optional(string)\u003cbr\u003e    instance_generations      = optional(bool)\u003cbr\u003e    tags                      = optional(list(map(string)))\u003cbr\u003e\u003cbr\u003e    availability_zone_distribution = optional(object({\u003cbr\u003e      capacity_distribution_strategy = string\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    initial_lifecycle_hook = optional(list(object({\u003cbr\u003e      name                    = string\u003cbr\u003e      lifecycle_transition    = string\u003cbr\u003e      default_result          = optional(string)\u003cbr\u003e      heartbeat_timeout       = optional(number)\u003cbr\u003e      notification_metadata   = optional(string)\u003cbr\u003e      notification_target_arn = optional(string)\u003cbr\u003e      role_arn                = optional(string)\u003cbr\u003e    })))\u003cbr\u003e\u003cbr\u003e    instance_maintenance_policy = optional(object({\u003cbr\u003e      min_healthy_percentage = optional(number)\u003cbr\u003e      max_healthy_percentage = optional(number)\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    mixed_instances_policy = optional(object({\u003cbr\u003e      launch_template = object({\u003cbr\u003e        launch_template_specification = object({\u003cbr\u003e          version = string\u003cbr\u003e        })\u003cbr\u003e        override = optional(list(object({\u003cbr\u003e          instance_type     = optional(string)\u003cbr\u003e          weighted_capacity = optional(string)\u003cbr\u003e          instance_requirements = optional(object({\u003cbr\u003e            accelerator_count = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            })),\u003cbr\u003e            accelerator_manufacturers = optional(list(string)),\u003cbr\u003e            accelerator_names         = optional(list(string)),\u003cbr\u003e            accelerator_total_memory_mib = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            })),\u003cbr\u003e            accelerator_types      = optional(list(string)),\u003cbr\u003e            allowed_instance_types = optional(list(string)),\u003cbr\u003e            bare_metal             = optional(string),\u003cbr\u003e            baseline_ebs_bandwidth_mbps = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            })),\u003cbr\u003e            burstable_performance                                   = optional(string),\u003cbr\u003e            cpu_manufacturers                                       = optional(list(string)),\u003cbr\u003e            excluded_instance_types                                 = optional(list(string)),\u003cbr\u003e            instance_generations                                    = optional(list(string)),\u003cbr\u003e            local_storage                                           = optional(string),\u003cbr\u003e            local_storage_types                                     = optional(list(string)),\u003cbr\u003e            max_spot_price_as_percentage_of_optimal_on_demand_price = optional(number),\u003cbr\u003e            memory_gib_per_vcpu = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            })),\u003cbr\u003e            memory_mib = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            })),\u003cbr\u003e            network_bandwidth_gbps = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            })),\u003cbr\u003e            network_interface_count = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            })),\u003cbr\u003e            on_demand_max_price_percentage_over_lowest_price = optional(number),\u003cbr\u003e            require_hibernate_support                        = optional(bool),\u003cbr\u003e            spot_max_price_percentage_over_lowest_price      = optional(number),\u003cbr\u003e            total_local_storage_gb = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            })),\u003cbr\u003e            vcpu_count = optional(object({\u003cbr\u003e              min = number,\u003cbr\u003e              max = number\u003cbr\u003e            }))\u003cbr\u003e          }))\u003cbr\u003e        })))\u003cbr\u003e      })\u003cbr\u003e\u003cbr\u003e      instances_distribution = optional(object({\u003cbr\u003e        on_demand_allocation_strategy            = optional(string)\u003cbr\u003e        on_demand_base_capacity                  = optional(number)\u003cbr\u003e        on_demand_percentage_above_base_capacity = optional(number)\u003cbr\u003e        spot_allocation_strategy                 = optional(string)\u003cbr\u003e        spot_instance_pools                      = optional(number)\u003cbr\u003e        spot_max_price                           = optional(string)\u003cbr\u003e      }))\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    warm_pool = optional(object({\u003cbr\u003e      max_group_prepared_capacity = optional(number)\u003cbr\u003e      min_size                    = optional(number)\u003cbr\u003e      pool_state                  = optional(string)\u003cbr\u003e      instance_reuse_policy = optional(object({\u003cbr\u003e        reuse_on_scale_in = optional(bool)\u003cbr\u003e      }))\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    instance_refresh = optional(list(object({\u003cbr\u003e      strategy = string\u003cbr\u003e      triggers = optional(list(string))\u003cbr\u003e      preferences = optional(object({\u003cbr\u003e        checkpoint_delay             = optional(number)\u003cbr\u003e        checkpoint_percent           = optional(number)\u003cbr\u003e        instance_warmup              = optional(number)\u003cbr\u003e        min_healthy_percentage       = optional(number)\u003cbr\u003e        max_healthy_percentage       = optional(number)\u003cbr\u003e        scale_in_protected_instances = optional(string)\u003cbr\u003e        standby_instances            = optional(string)\u003cbr\u003e        auto_rollback                = optional(bool)\u003cbr\u003e      }))\u003cbr\u003e    })))\u003cbr\u003e  })\u003c/pre\u003e | n/a | yes |\n| \u003ca name=\"input_autoscaling_attachments\"\u003e\u003c/a\u003e [autoscaling\\_attachments](#input\\_autoscaling\\_attachments) | Map of autoscaling attachment configurations | \u003cpre\u003emap(object({\u003cbr\u003e    autoscaling_group_name = string\u003cbr\u003e    lb_target_group_arn    = optional(string)\u003cbr\u003e    elb                    = optional(string)\u003cbr\u003e  }))\u003c/pre\u003e | `{}` | no |\n| \u003ca name=\"input_autoscaling_notification_enabled\"\u003e\u003c/a\u003e [autoscaling\\_notification\\_enabled](#input\\_autoscaling\\_notification\\_enabled) | Boolean flag to enable or disable autoscaling notifications | `bool` | `false` | no |\n| \u003ca name=\"input_autoscaling_notification_types\"\u003e\u003c/a\u003e [autoscaling\\_notification\\_types](#input\\_autoscaling\\_notification\\_types) | List of notification types for the Auto Scaling group | `list(string)` | \u003cpre\u003e[\u003cbr\u003e  \"autoscaling:EC2_INSTANCE_LAUNCH\",\u003cbr\u003e  \"autoscaling:EC2_INSTANCE_TERMINATE\",\u003cbr\u003e  \"autoscaling:EC2_INSTANCE_LAUNCH_ERROR\",\u003cbr\u003e  \"autoscaling:EC2_INSTANCE_TERMINATE_ERROR\"\u003cbr\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_autoscaling_policy\"\u003e\u003c/a\u003e [autoscaling\\_policy](#input\\_autoscaling\\_policy) | Configuration for the autoscaling policy | \u003cpre\u003eobject({\u003cbr\u003e    name                      = optional(string)\u003cbr\u003e    policy_type               = optional(string)\u003cbr\u003e    adjustment_type           = optional(string)\u003cbr\u003e    cooldown                  = optional(number)\u003cbr\u003e    estimated_instance_warmup = optional(number)\u003cbr\u003e    scaling_adjustment        = optional(number)\u003cbr\u003e    metric_aggregation_type   = optional(string)\u003cbr\u003e    min_adjustment_magnitude  = optional(number)\u003cbr\u003e\u003cbr\u003e    step_adjustment = optional(list(object({\u003cbr\u003e      scaling_adjustment          = number\u003cbr\u003e      metric_interval_lower_bound = optional(number)\u003cbr\u003e      metric_interval_upper_bound = optional(number)\u003cbr\u003e    })))\u003cbr\u003e\u003cbr\u003e    target_tracking_configuration = optional(object({\u003cbr\u003e      disable_scale_in = optional(bool)\u003cbr\u003e      target_value     = optional(number)\u003cbr\u003e\u003cbr\u003e      predefined_metric_specification = optional(object({\u003cbr\u003e        predefined_metric_type = string\u003cbr\u003e        resource_label         = optional(string)\u003cbr\u003e      }))\u003cbr\u003e\u003cbr\u003e      customized_metric_specification = optional(object({\u003cbr\u003e        metric_name = string\u003cbr\u003e        namespace   = string\u003cbr\u003e        statistic   = string\u003cbr\u003e        unit        = optional(string)\u003cbr\u003e\u003cbr\u003e        metric_dimension = optional(list(object({\u003cbr\u003e          name  = string\u003cbr\u003e          value = string\u003cbr\u003e        })))\u003cbr\u003e      }))\u003cbr\u003e    }))\u003cbr\u003e  })\u003c/pre\u003e | `{}` | no |\n| \u003ca name=\"input_autoscaling_sns_topic_arn\"\u003e\u003c/a\u003e [autoscaling\\_sns\\_topic\\_arn](#input\\_autoscaling\\_sns\\_topic\\_arn) | ARN of the SNS topic to send Auto Scaling notifications to | `string` | n/a | yes |\n| \u003ca name=\"input_create_autoscaling_attachment\"\u003e\u003c/a\u003e [create\\_autoscaling\\_attachment](#input\\_create\\_autoscaling\\_attachment) | Whether to create autoscaling attachments | `bool` | `false` | no |\n| \u003ca name=\"input_create_traffic_source_attachment\"\u003e\u003c/a\u003e [create\\_traffic\\_source\\_attachment](#input\\_create\\_traffic\\_source\\_attachment) | Whether to create traffic source attachment for the auto scaling group | `bool` | `false` | no |\n| \u003ca name=\"input_instance_profile_name\"\u003e\u003c/a\u003e [instance\\_profile\\_name](#input\\_instance\\_profile\\_name) | The name of the IAM instance profile | `string` | `\"asg-instance-profile\"` | no |\n| \u003ca name=\"input_launch_template\"\u003e\u003c/a\u003e [launch\\_template](#input\\_launch\\_template) | Configuration for the EC2 Launch Template | \u003cpre\u003eobject({\u003cbr\u003e    name          = string\u003cbr\u003e    description   = optional(string)\u003cbr\u003e    image_id      = string\u003cbr\u003e    instance_type = string\u003cbr\u003e    user_data     = optional(string)\u003cbr\u003e\u003cbr\u003e    disable_api_stop        = optional(bool)\u003cbr\u003e    default_version         = optional(string)\u003cbr\u003e    update_default_version  = optional(bool)\u003cbr\u003e    disable_api_termination = optional(bool)\u003cbr\u003e    ebs_optimized           = optional(bool)\u003cbr\u003e\u003cbr\u003e    block_device_mappings = optional(list(object({\u003cbr\u003e      device_name  = string\u003cbr\u003e      no_device    = optional(string)\u003cbr\u003e      virtual_name = optional(string)\u003cbr\u003e      ebs = optional(object({\u003cbr\u003e        volume_size           = optional(number)\u003cbr\u003e        delete_on_termination = optional(bool)\u003cbr\u003e        encrypted             = optional(bool)\u003cbr\u003e        iops                  = optional(number)\u003cbr\u003e        kms_key_id            = optional(string)\u003cbr\u003e        snapshot_id           = optional(string)\u003cbr\u003e        throughput            = optional(number)\u003cbr\u003e        volume_type           = optional(string)\u003cbr\u003e      }))\u003cbr\u003e    })))\u003cbr\u003e\u003cbr\u003e    cpu_options = optional(object({\u003cbr\u003e      core_count       = optional(number)\u003cbr\u003e      amd_sev_snp      = optional(bool)\u003cbr\u003e      threads_per_core = optional(number)\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    capacity_reservation_specification = optional(object({\u003cbr\u003e      capacity_reservation_preference = optional(string)\u003cbr\u003e      capacity_reservation_target = optional(object({\u003cbr\u003e        capacity_reservation_id                 = optional(string)\u003cbr\u003e        capacity_reservation_resource_group_arn = optional(string)\u003cbr\u003e      }))\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    credit_specification = optional(object({\u003cbr\u003e      cpu_credits = optional(string)\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    elastic_inference_accelerator = optional(object({\u003cbr\u003e      type = string\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    enclave_options = optional(object({\u003cbr\u003e      enabled = bool\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    hibernation_options = optional(object({\u003cbr\u003e      configured = bool\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    elastic_gpu_specifications = optional(list(object({\u003cbr\u003e      type = string\u003cbr\u003e    })))\u003cbr\u003e\u003cbr\u003e    iam_instance_profile = optional(object({\u003cbr\u003e      arn  = optional(string)\u003cbr\u003e      name = optional(string)\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    instance_requirements = optional(object({\u003cbr\u003e      accelerator_count                                       = optional(object({ min = number, max = number }))\u003cbr\u003e      accelerator_manufacturers                               = optional(list(string))\u003cbr\u003e      accelerator_names                                       = optional(list(string))\u003cbr\u003e      accelerator_total_memory_mib                            = optional(object({ min = number, max = number }))\u003cbr\u003e      accelerator_types                                       = optional(list(string))\u003cbr\u003e      allowed_instance_types                                  = optional(list(string))\u003cbr\u003e      bare_metal                                              = optional(string)\u003cbr\u003e      baseline_ebs_bandwidth_mbps                             = optional(object({ min = number, max = number }))\u003cbr\u003e      burstable_performance                                   = optional(string)\u003cbr\u003e      cpu_manufacturers                                       = optional(list(string))\u003cbr\u003e      excluded_instance_types                                 = optional(list(string))\u003cbr\u003e      instance_generations                                    = optional(list(string))\u003cbr\u003e      local_storage                                           = optional(string)\u003cbr\u003e      local_storage_types                                     = optional(list(string))\u003cbr\u003e      max_spot_price_as_percentage_of_optimal_on_demand_price = optional(number)\u003cbr\u003e      memory_gib_per_vcpu                                     = optional(object({ min = number, max = number }))\u003cbr\u003e      memory_mib                                              = optional(object({ min = number, max = number }))\u003cbr\u003e      network_interface_count                                 = optional(object({ min = number, max = number }))\u003cbr\u003e      on_demand_max_price_percentage_over_lowest_price        = optional(number)\u003cbr\u003e      require_hibernate_support                               = optional(bool)\u003cbr\u003e      spot_max_price_percentage_over_lowest_price             = optional(number)\u003cbr\u003e      total_local_storage_gb                                  = optional(object({ min = number, max = number }))\u003cbr\u003e      vcpu_count                                              = optional(object({ min = number, max = number }))\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    kernel_id                            = optional(string)\u003cbr\u003e    ram_disk_id                          = optional(string)\u003cbr\u003e    instance_initiated_shutdown_behavior = optional(string)\u003cbr\u003e\u003cbr\u003e    monitoring = optional(object({\u003cbr\u003e      enabled = bool\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    maintenance_options = optional(object({\u003cbr\u003e      auto_recovery = string\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    license_specification = optional(object({\u003cbr\u003e      license_configuration_arn = optional(string)\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    instance_market_options = optional(object({\u003cbr\u003e      market_type = string\u003cbr\u003e      spot_options = optional(object({\u003cbr\u003e        block_duration_minutes         = optional(number)\u003cbr\u003e        instance_interruption_behavior = optional(string)\u003cbr\u003e        max_price                      = optional(string)\u003cbr\u003e        spot_instance_type             = optional(string)\u003cbr\u003e        valid_until                    = optional(string)\u003cbr\u003e      }))\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    network_interfaces = optional(list(object({\u003cbr\u003e      associate_public_ip_address = optional(bool)\u003cbr\u003e      description                 = optional(string)\u003cbr\u003e      device_index                = optional(number)\u003cbr\u003e      interface_type              = optional(string)\u003cbr\u003e      ipv4_prefixes               = optional(list(string))\u003cbr\u003e      ipv4_prefix_count           = optional(number)\u003cbr\u003e      ipv4_address_count          = optional(number)\u003cbr\u003e      ipv6_prefix_count           = optional(number)\u003cbr\u003e      ipv6_prefixes               = optional(list(string))\u003cbr\u003e      ipv4_addresses              = optional(list(string))\u003cbr\u003e      ipv6_addresses              = optional(list(string))\u003cbr\u003e      ipv6_address_count          = optional(number)\u003cbr\u003e      network_interface_id        = optional(string)\u003cbr\u003e      network_card_index          = optional(number)\u003cbr\u003e      private_ip_address          = optional(string)\u003cbr\u003e      primary_ipv6                = optional(bool)\u003cbr\u003e      security_groups             = optional(list(string))\u003cbr\u003e      subnet_id                   = optional(string)\u003cbr\u003e      delete_on_termination       = optional(bool)\u003cbr\u003e      connection_tracking_specification = optional(object({\u003cbr\u003e        tcp_established_timeout = optional(number)\u003cbr\u003e        udp_stream_timeout      = optional(number)\u003cbr\u003e        udp_timeout             = optional(number)\u003cbr\u003e      }))\u003cbr\u003e    })))\u003cbr\u003e\u003cbr\u003e    metadata_options = optional(object({\u003cbr\u003e      http_endpoint               = optional(string)\u003cbr\u003e      http_tokens                 = optional(string)\u003cbr\u003e      http_put_response_hop_limit = optional(number)\u003cbr\u003e      http_protocol_ipv6          = optional(string)\u003cbr\u003e      instance_metadata_tags      = optional(string)\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e    placement = optional(object({\u003cbr\u003e      availability_zone       = optional(string)\u003cbr\u003e      affinity                = optional(string)\u003cbr\u003e      group_name              = optional(string)\u003cbr\u003e      host_id                 = optional(string)\u003cbr\u003e      host_resource_group_arn = optional(string)\u003cbr\u003e      partition_number        = optional(number)\u003cbr\u003e      spread_domain           = optional(string)\u003cbr\u003e      tenancy                 = optional(string)\u003cbr\u003e    }))\u003cbr\u003e    private_dns_name_options = optional(object({\u003cbr\u003e      enable_resource_name_dns_a_record    = optional(bool)\u003cbr\u003e      enable_resource_name_dns_aaaa_record = optional(bool)\u003cbr\u003e      hostname_type                        = optional(string)\u003cbr\u003e    }))\u003cbr\u003e    tag_specifications = optional(object({\u003cbr\u003e      resource_type = optional(string)\u003cbr\u003e      tags          = optional(string)\u003cbr\u003e    }))\u003cbr\u003e  })\u003c/pre\u003e | n/a | yes |\n| \u003ca name=\"input_predictive_scaling_configuration\"\u003e\u003c/a\u003e [predictive\\_scaling\\_configuration](#input\\_predictive\\_scaling\\_configuration) | Predictive scaling configuration | \u003cpre\u003eobject({\u003cbr\u003e    mode                         = optional(string)\u003cbr\u003e    scheduling_buffer_time       = optional(number)\u003cbr\u003e    max_capacity_breach_behavior = optional(string)\u003cbr\u003e    max_capacity_buffer          = optional(number)\u003cbr\u003e\u003cbr\u003e    metric_specification = list(object({\u003cbr\u003e      target_value = number\u003cbr\u003e\u003cbr\u003e      predefined_metric_pair_specification = optional(object({\u003cbr\u003e        predefined_metric_type = string\u003cbr\u003e        resource_label         = optional(string)\u003cbr\u003e      }))\u003cbr\u003e\u003cbr\u003e      predefined_load_metric_specification = optional(object({\u003cbr\u003e        predefined_metric_type = string\u003cbr\u003e        resource_label         = optional(string)\u003cbr\u003e      }))\u003cbr\u003e\u003cbr\u003e      predefined_scaling_metric_specification = optional(object({\u003cbr\u003e        predefined_metric_type = string\u003cbr\u003e        resource_label         = optional(string)\u003cbr\u003e      }))\u003cbr\u003e\u003cbr\u003e      customized_scaling_metric_specification = optional(object({\u003cbr\u003e        metric_data_queries = list(object({\u003cbr\u003e          id          = string\u003cbr\u003e          expression  = optional(string)\u003cbr\u003e          label       = optional(string)\u003cbr\u003e          return_data = optional(bool)\u003cbr\u003e\u003cbr\u003e          metric_stat = optional(object({\u003cbr\u003e            stat = string\u003cbr\u003e            unit = optional(string)\u003cbr\u003e\u003cbr\u003e            metric = object({\u003cbr\u003e              metric_name = string\u003cbr\u003e              namespace   = string\u003cbr\u003e              dimensions = optional(list(object({\u003cbr\u003e                name  = string\u003cbr\u003e                value = string\u003cbr\u003e              })))\u003cbr\u003e            })\u003cbr\u003e          }))\u003cbr\u003e        }))\u003cbr\u003e      }))\u003cbr\u003e\u003cbr\u003e      customized_load_metric_specification = optional(object({\u003cbr\u003e        metric_data_queries = list(object({\u003cbr\u003e          id          = string\u003cbr\u003e          expression  = optional(string)\u003cbr\u003e          label       = optional(string)\u003cbr\u003e          return_data = optional(bool)\u003cbr\u003e\u003cbr\u003e          metric_stat = optional(object({\u003cbr\u003e            stat = string\u003cbr\u003e            unit = optional(string)\u003cbr\u003e\u003cbr\u003e            metric = object({\u003cbr\u003e              metric_name = string\u003cbr\u003e              namespace   = string\u003cbr\u003e              dimensions = optional(list(object({\u003cbr\u003e                name  = string\u003cbr\u003e                value = string\u003cbr\u003e              })))\u003cbr\u003e            })\u003cbr\u003e          }))\u003cbr\u003e        }))\u003cbr\u003e      }))\u003cbr\u003e\u003cbr\u003e      customized_capacity_metric_specification = optional(object({\u003cbr\u003e        metric_data_queries = list(object({\u003cbr\u003e          id          = string\u003cbr\u003e          expression  = optional(string)\u003cbr\u003e          label       = optional(string)\u003cbr\u003e          return_data = optional(bool)\u003cbr\u003e\u003cbr\u003e          metric_stat = optional(object({\u003cbr\u003e            stat = string\u003cbr\u003e            unit = optional(string)\u003cbr\u003e\u003cbr\u003e            metric = object({\u003cbr\u003e              metric_name = string\u003cbr\u003e              namespace   = string\u003cbr\u003e              dimensions = optional(list(object({\u003cbr\u003e                name  = string\u003cbr\u003e                value = string\u003cbr\u003e              })))\u003cbr\u003e            })\u003cbr\u003e          }))\u003cbr\u003e        }))\u003cbr\u003e      }))\u003cbr\u003e    }))\u003cbr\u003e  })\u003c/pre\u003e | `null` | no |\n| \u003ca name=\"input_schedules\"\u003e\u003c/a\u003e [schedules](#input\\_schedules) | List of Auto Scaling schedules | \u003cpre\u003elist(object({\u003cbr\u003e    scheduled_action_name = string\u003cbr\u003e    desired_capacity      = optional(number)\u003cbr\u003e    min_size              = optional(number)\u003cbr\u003e    max_size              = optional(number)\u003cbr\u003e    start_time            = optional(string)\u003cbr\u003e    end_time              = optional(string)\u003cbr\u003e    recurrence            = optional(string)\u003cbr\u003e    time_zone             = optional(string)\u003cbr\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_security_group_data\"\u003e\u003c/a\u003e [security\\_group\\_data](#input\\_security\\_group\\_data) | (optional) Security Group data | \u003cpre\u003eobject({\u003cbr\u003e    security_group_ids_to_attach = optional(list(string), [])\u003cbr\u003e    create                       = optional(bool, true)\u003cbr\u003e    description                  = optional(string, null)\u003cbr\u003e    ingress_rules = optional(list(object({\u003cbr\u003e      description              = optional(string, null)\u003cbr\u003e      cidr_block               = optional(string, null)\u003cbr\u003e      source_security_group_id = optional(string, null)\u003cbr\u003e      from_port                = number\u003cbr\u003e      ip_protocol              = string\u003cbr\u003e      to_port                  = string\u003cbr\u003e      self                     = optional(bool, false)\u003cbr\u003e    })), [])\u003cbr\u003e    egress_rules = optional(list(object({\u003cbr\u003e      description                   = optional(string, null)\u003cbr\u003e      cidr_block                    = optional(string, null)\u003cbr\u003e      destination_security_group_id = optional(string, null)\u003cbr\u003e      from_port                     = number\u003cbr\u003e      ip_protocol                   = string\u003cbr\u003e      to_port                       = string\u003cbr\u003e      prefix_list_id                = optional(string, null)\u003cbr\u003e    })), [])\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"create\": false\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_security_group_name\"\u003e\u003c/a\u003e [security\\_group\\_name](#input\\_security\\_group\\_name) | alb security group name | `string` | n/a | yes |\n| \u003ca name=\"input_security_groups\"\u003e\u003c/a\u003e [security\\_groups](#input\\_security\\_groups) | n/a | `list(string)` | `[]` | no |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | Tags to apply to resources | `map(string)` | \u003cpre\u003e{\u003cbr\u003e  \"Environment\": \"dev\",\u003cbr\u003e  \"Name\": \"arc\"\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_traffic_sources\"\u003e\u003c/a\u003e [traffic\\_sources](#input\\_traffic\\_sources) | List of traffic sources to attach to the Auto Scaling group | \u003cpre\u003elist(object({\u003cbr\u003e    identifier = string\u003cbr\u003e    type       = string\u003cbr\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | The VPC ID for the resources | `string` | n/a | yes |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_asg_arn\"\u003e\u003c/a\u003e [asg\\_arn](#output\\_asg\\_arn) | ARN of the Auto Scaling Group |\n| \u003ca name=\"output_asg_id\"\u003e\u003c/a\u003e [asg\\_id](#output\\_asg\\_id) | ID of the Auto Scaling Group |\n| \u003ca name=\"output_availability_zones\"\u003e\u003c/a\u003e [availability\\_zones](#output\\_availability\\_zones) | Availability Zones used by the Auto Scaling Group |\n| \u003ca name=\"output_desired_capacity\"\u003e\u003c/a\u003e [desired\\_capacity](#output\\_desired\\_capacity) | Desired capacity of the Auto Scaling Group |\n| \u003ca name=\"output_enabled_metrics\"\u003e\u003c/a\u003e [enabled\\_metrics](#output\\_enabled\\_metrics) | List of enabled metrics for the ASG |\n| \u003ca name=\"output_iam_instance_profile_arn\"\u003e\u003c/a\u003e [iam\\_instance\\_profile\\_arn](#output\\_iam\\_instance\\_profile\\_arn) | ARN of the IAM instance profile |\n| \u003ca name=\"output_iam_role_name\"\u003e\u003c/a\u003e [iam\\_role\\_name](#output\\_iam\\_role\\_name) | The name of the IAM role attached to the instance profile |\n| \u003ca name=\"output_launch_template_arn\"\u003e\u003c/a\u003e [launch\\_template\\_arn](#output\\_launch\\_template\\_arn) | The ARN of the launch template |\n| \u003ca name=\"output_launch_template_default_version\"\u003e\u003c/a\u003e [launch\\_template\\_default\\_version](#output\\_launch\\_template\\_default\\_version) | The default version of the launch template |\n| \u003ca name=\"output_launch_template_id\"\u003e\u003c/a\u003e [launch\\_template\\_id](#output\\_launch\\_template\\_id) | The ID of the launch template |\n| \u003ca name=\"output_launch_template_latest_version\"\u003e\u003c/a\u003e [launch\\_template\\_latest\\_version](#output\\_launch\\_template\\_latest\\_version) | The latest version of the launch template |\n| \u003ca name=\"output_launch_template_name\"\u003e\u003c/a\u003e [launch\\_template\\_name](#output\\_launch\\_template\\_name) | The name of the launch template |\n| \u003ca name=\"output_name\"\u003e\u003c/a\u003e [name](#output\\_name) | Name of the Auto Scaling Group |\n\u003c!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n\n## Versioning  \nThis project uses a `.version` file at the root of the repo which the pipeline reads from and does a git tag.  \n\nWhen you intend to commit to `main`, you will need to increment this version. Once the project is merged,\nthe pipeline will kick off and tag the latest git commit.  \n\n## Development\n\n### Prerequisites\n\n- [terraform](https://learn.hashicorp.com/terraform/getting-started/install#installing-terraform)\n- [terraform-docs](https://github.com/segmentio/terraform-docs)\n- [pre-commit](https://pre-commit.com/#install)\n- [golang](https://golang.org/doc/install#install)\n- [golint](https://github.com/golang/lint#installation)\n\n### Configurations\n\n- Configure pre-commit hooks\n  ```sh\n  pre-commit install\n  ```\n\n### Versioning\n\nwhile Contributing or doing git commit please specify the breaking change in your commit message whether its major,minor or patch\n\nFor Example\n\n```sh\ngit commit -m \"your commit message #major\"\n```\nBy specifying this , it will bump the version and if you don't specify this in your commit message then by default it will consider patch and will bump that accordingly\n\n### Tests\n- Tests are available in `test` directory\n- Configure the dependencies\n  ```sh\n  cd test/\n  go mod init github.com/sourcefuse/terraform-aws-refarch-ec2-autoscale-group\n  go get github.com/gruntwork-io/terratest/modules/terraform\n  ```\n- Now execute the test  \n  ```sh\n  go test -timeout  30m\n  ```\n\n## Authors\n\nThis project is authored by:\n- SourceFuse ARC Team\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-ec2-autoscale-group","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-ec2-autoscale-group","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-ec2-autoscale-group/lists"}