10
votes

I am trying to build an AWS EC2 redhat instance using an AWS launch template with Terraform.

I can create an launch template with a call to Terraform's resource aws_launch_template. My question is how do I use Terraform to build an EC2 server with the created launch template?

What Terraform aws provider resource do I call?

Many thanks for your help!

2
Are you specifically wanting to create a single EC2 instance or did you want to create an autoscaling group with a single EC2 instance in it as in stackoverflow.com/a/53750292/2291321?ydaetskcoR

2 Answers

11
votes

Welcome to Stack Overflow!

You can create an aws_autoscaling_group resource to make use of your new Launch Template. Please see the example here for more details.

Code:

resource "aws_launch_template" "foobar" {
  name_prefix   = "foobar"
  image_id      = "ami-1a2b3c"
  instance_type = "t2.micro"
}

resource "aws_autoscaling_group" "bar" {
  availability_zones = ["us-east-1a"]
  desired_capacity   = 1
  max_size           = 1
  min_size           = 1

  launch_template = {
    id      = "${aws_launch_template.foobar.id}"
    version = "$$Latest"
  }
}
2
votes

Here is the code I used to build an EC2 image with a launch template.

variable "aws_access_key" {}
variable "aws_secret_key" {}

provider "aws" {
    access_key = "${var.aws_access_key}"
    secret_key = "${var.aws_secret_key}"
    region     = "us-east-1"
}

resource "aws_launch_template" "foobar" {
    name_prefix   = "foobar"
    image_id      = "ami-0080e4c5bc078760e"
    instance_type = "t2.micro"
}

resource "aws_autoscaling_group" "bar" {
    availability_zones = ["us-east-1a"]
    desired_capacity   = 1
    max_size           = 1
    min_size           = 1

    launch_template = {
      id      = "${aws_launch_template.foobar.id}"
      version = "$$Latest"
    }
}

Many thanks Adil!