wiki.getshifting.com

--- Sjoerd Hooft's InFormation Technology ---

User Tools

Site Tools


terraformawswebserver

Terraform AWS WebServer

Summary: This is a terraform deployment for an EC2 instance with a security group and the loading of user data.
Date: Around 2021
Refactor: 26 January 2025: Checked links and formatting.

  • Create a EC2 web server and output the public IP
  • Create a security group for the webserver opening port 80 and 443
  • Run a script (user data) on the webserver

Uer Data

First the script to run, this needs to be in the same directory as the config file:

server-script.sh
#!/bin/bash
sudo yum update
sudo yum install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd
echo "<h1>Hello from Terraform</h1>" | sudo tee /var/www/html/index.html

And now the config file:

main.tf
provider "aws" {
    profile = "terraform"
}
 
variable "ingressrules" {
    type = list(number)
    default = [80,443]
}
 
variable "egressrules" {
    type = list(number)
    default = [80,443]
}
 
resource "aws_instance" "web" {
    ami = "ami-0d1bf5b68307103c2"
    instance_type = "t2.micro"
    security_groups = [aws_security_group.webtraffic.name]
    user_data = file("server-script.sh")
    tags = {
        Name = "WebServer"
        Terraform = "True"
    }
}
 
resource "aws_eip" "elasticeip" {
    instance = aws_instance.web.id
}
 
resource "aws_security_group" "webtraffic" {
    name = "Allow Web Traffic"
 
    dynamic "ingress" {
        iterator = port
        for_each = var.ingressrules
        content {
            from_port = port.value
            to_port = port.value
            protocol = "TCP"
            cidr_blocks = ["0.0.0.0/0"]
        }
    }
 
    dynamic "egress" {
        iterator = port
        for_each = var.egressrules
        content {
            from_port = port.value
            to_port = port.value
            protocol = "TCP"
            cidr_blocks = ["0.0.0.0/0"]
        }
    }
}
 
output "webip" {
    value = aws_eip.elasticeip.public_ip
}
terraformawswebserver.txt · Last modified: by 127.0.0.1