So you want to create an autoscaling group on AWS using terraform. The following are the minimum steps in order to achieve so.
Before writing the actual code you shall specify the aws terraform provider as well as the region on the provider.tf file.
provider "aws" { version = "~> 2.0" region = "eu-west-1" } terraform { required_version = "~>0.12.0" }
The next step would be to define some variables on the variables.tf file.
variable "vpc_id" { type = string default = "your-vpc-id" } variable "launch_configuration_name" { type = string default = "launch_configuration_name" } variable "auto_scalling_group_name" { type = string default = "auto_scalling_group_name" } variable "image_id" { type = string default = "image-id-based-on-the-region" } variable "instance_type" { type = "string" default = "t2.micro" }
Then we are going to have the autoscalling group configuration on the autoscalling_group.tf file.
data "aws_subnet_ids" "subnets" { vpc_id = var.vpc_id } data "aws_subnet" "subnet_values" { for_each = data.aws_subnet_ids.subnets.ids id = each.value } resource"aws_launch_configuration" "launch-configuration" { name = var.launch_configuration_name image_id = var.image_id instance_type = var.instance_type } resource "aws_autoscaling_group" "autoscalling_group_config" { name = var.auto_scalling_group_name max_size = 3 min_size = 2 health_check_grace_period = 300 health_check_type = "EC2" desired_capacity = 3 force_delete = true vpc_zone_identifier = [for s in data.aws_subnet.subnet_values: s.id] launch_configuration = aws_launch_configuration.launch-configuration.name lifecycle { create_before_destroy = true } }
Let’s break them down.
The vpc id is needed in order to identify the subnets used by your autoscaling group.
Thus the value vpc_zone_identifier shall derive the subnets from the vpc defined.
Then you have to create a launch configuration.
The launch configuration shall specify the image id which is based on your region and the instance type.
To execute this provided you have your aws credentials in place you have to do initialize and then apply
> terraform init > terraform apply
On the next tutorial we shall focus on adding an instance security group and a boot script.
One thought on “Autoscaling Groups with terraform on AWS Part 1: Basic Steps”