Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Terraform: Autoscaling Group Demo

Build out an autoscaling group for a microservice.


Inputs are set in file terraform.tfvars. They are:

  • S3 Bucket Name: must be unique
  • Public Key (string): This is the key pair used to access instance and trigger auto-scaling


  • The microservice code is available as a zip file: files/

  • An S3 bucket is created and the code zip file is uploaded to it

  • A new Autoscaling group is created consisting of:

    • A launch config based on a specified AMI (defaults to an AMI from us-west-2)
    • An Instance Role is applied for S3 Read-Only access
    • A new security group is created and applied to launch config
    • NodeJS, PM2 (process manager) and the microservice are installed and started via UserData
    • An autoscaling policy is setup to manage number of instances
    • A CloudWatch alarm tracking instance metrics is attached to autoscaling group
  • A new ELB is created and instances are registered


  • Run terraform plan, follow instructions as needed.

    • terraform init is needed to initialize
    • View output of terraform plan to see what will be created
  • Run terraform run to start provisioning resources

    • final output will be the Elastic Load Balancer URL
    • ELB url format: http://ms-elb-xxxxxxx.<region>
    • Accessed via browser, outputs JSON : {"hits": NNN,"name":"hit-counter-pid-XXX","host":"ip-XXX-XXX-XXX-XXX"}
  • Subscribe to SNS topic hit-counter-asg under AWS Console > SNS > Topics hit-counter-asg

    • Choose EMAIL or SMS as protocol and confirm subscription
  • Find newly created instance under AWS Console > EC2 > Name ms_asg and lookup it's public IP

  • Use the SSH Private Key (pair of public key specified earlier) to access instance

    • Access using ssh -i <private_key_file> ec2-user@<public ip>
  • Using the stress tool, simulate high CPU Utilization and trigger the scaling up of instances.

stress --cpu 2

Terraform setup based on:

Dependency graph generation (using GraphViz):

terraform graph -draw-cycles -type=plan > autoscaling_graph
"c:\Program Files (x86)\Graphviz2.38\bin\dot.exe" -Tpng autoscaling_graph > graph.png


No releases published


No packages published