terraform { required_version = "~> 1.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } } } provider "aws" { region = var.region } data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-*20*-amd64-server-*"] } filter { name = "virtualization-type" values = ["hvm"] } owners = ["099720109477"] # Canonical } resource "aws_vpc" "vpc" { cidr_block = var.cidr_vpc enable_dns_support = true enable_dns_hostnames = true } resource "aws_internet_gateway" "igw" { vpc_id = aws_vpc.vpc.id } resource "aws_subnet" "subnet_public" { vpc_id = aws_vpc.vpc.id cidr_block = var.cidr_subnet } resource "aws_route_table" "rtb_public" { vpc_id = aws_vpc.vpc.id route { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.igw.id } } resource "aws_route_table_association" "rta_subnet_public" { subnet_id = aws_subnet.subnet_public.id route_table_id = aws_route_table.rtb_public.id } resource "aws_security_group" "sg_22_80" { name = "sg_22" vpc_id = aws_vpc.vpc.id # SSH access from the VPC ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } ingress { from_port = 80 to_port = 80 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } 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"] } } data "template_file" "user_data" { template = file("../scripts/ssh-run-guided-install.yaml") vars = { new_relic_account_id = var.new_relic_account_id new_relic_api_key = var.new_relic_api_key new_relic_region = var.new_relic_region } } resource "aws_instance" "web" { for_each = toset(["first", "second", "third"]) ami = data.aws_ami.ubuntu.id instance_type = "t2.micro" subnet_id = aws_subnet.subnet_public.id vpc_security_group_ids = [aws_security_group.sg_22_80.id] associate_public_ip_address = true user_data = data.template_file.user_data.rendered tags = { Name = "Learn-CloudInit" } } output "public_ip" { value = toset([ for i in aws_instance.web : i.public_ip ]) }