Ashish Parab
Ashish Parab

Reputation: 172

httpserver in EC2 instance via terraform

terraform {
  required_providers {
    aws = {
      version = "~>3.27"
      source  = "hashicorp/aws"
    }
  }
}


provider "aws" {
  profile = "default"
  region  = "us-west-2"

}

variable "tag_name" {
  type = string

}

resource "aws_instance" "app_server" {
  ami                    = "ami-830c94e3"
  instance_type          = "t2.micro"
  vpc_security_group_ids = [aws_security_group.allow_port_8080.id]
  user_data              = <<-EOF
  
    #!/bin/bash
# Use this for your user data (script from top to bottom)
# install httpd (Linux 2 version)
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
      EOF
  tags = {
    Name = var.tag_name
  }
}

resource "aws_security_group" "allow_port_8080" {
  name = "allow_port_8080"


  ingress {

    from_port   = 8080
    to_port     = 8080
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]

  }


}

this is the terraform file created. I want to set up http server in my EC2 instance then to access it via ipv4 public IP. but http://publicip:8080, giving error as This site can’t be reached

I tried modifying as below

user_data              = <<-EOF
  
    #!/bin/bash

    echo "<h1>Hello World</h1>" > index.html
    nohup busybox httpd -f -p 8080 
      EOF

I am following https://www.youtube.com/watch?v=0i-Q6ZMDtlQ&list=PLqq-6Pq4lTTYwjFB9E9aLUJhTBLsCF0p_&index=32

thank you

Upvotes: 0

Views: 191

Answers (1)

Marcin
Marcin

Reputation: 238159

Your aws_security_group does not allow for any outgoing traffic, thus you can't install httpd on it. You have to explicitly allow outgoing traffic:

resource "aws_security_group" "allow_port_8080" {
  name = "allow_port_8080"


  ingress {

    from_port   = 8080
    to_port     = 8080
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]

  }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }
}

Upvotes: 5

Related Questions