Enterprise Java

Autoscaling Groups with terraform on AWS Part 1: Basic Steps

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.

1
2
3
4
5
6
7
8
provider "aws" {
  version = "~> 2.0"
  region  = "eu-west-1"
}
 
terraform {
  required_version = "~>0.12.0"
}

Then we shall

The first step would be to define some variables on the variables.tf file.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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

1
2
> terraform init
> terraform apply

Published on Java Code Geeks with permission by Emmanouil Gkatziouras, partner at our JCG program. See the original article here: Autoscaling Groups with terraform on AWS Part 1: Basic Steps

Opinions expressed by Java Code Geeks contributors are their own.

Emmanouil Gkatziouras

He is a versatile software engineer with experience in a wide variety of applications/services.He is enthusiastic about new projects, embracing new technologies, and getting to know people in the field of software.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button