-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.tf
147 lines (120 loc) · 4.11 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
provider "aws" {
shared_config_files = ["~/.aws/config"]
shared_credentials_files = ["~/.aws/credentials"]
}
resource "aws_vpc" "jeffSA_vpc" { #El recurso aws_vpc nos permite crear una red privada virtual que es un segmento de red de AWS que nos corresponde
cidr_block = "10.0.0.0/16"
tags = {
Name="jeffSA_VPC"
}
}
resource "aws_subnet" "public_subnet" {
cidr_block = "10.0.1.0/24"
vpc_id = aws_vpc.jeffSA_vpc.id
tags = {
Name="jeffSA_VPC_public_subnet"
}
}
resource "aws_subnet" "private_subnet" {
cidr_block = "10.0.2.0/24"
vpc_id = aws_vpc.jeffSA_vpc.id
tags = {
Name="jeffSA_VPC_private_subnet"
}
}
#El recurso aws_subnet nos ayuda a segmentar nuestra VPC, en nuesto caso
#hemos segmentando en una red pública y en una red privada
resource "aws_internet_gateway" "jeffSA_public_internet_gatewat" {
vpc_id = aws_vpc.jeffSA_vpc.id
}
resource "aws_route_table" "jeffSA_public_subnet_route_table" {
vpc_id = aws_vpc.jeffSA_vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.jeffSA_public_internet_gatewat.id
}
route {
ipv6_cidr_block = "::/0"
gateway_id = aws_internet_gateway.jeffSA_public_internet_gatewat.id
}
}
resource "aws_route_table_association" "jeffSA_public_association" {
route_table_id = aws_route_table.jeffSA_public_subnet_route_table.id
subnet_id = aws_subnet.public_subnet.id
}
resource "aws_security_group" "web_server_sg" {
vpc_id = aws_vpc.jeffSA_vpc.id
ingress {
description = "Allow HTTP trafic from internet"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] //Queremos que todo el tráfico entre
}
ingress {
description = "Allow HTTPS trafic from internet"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] //Queremos que todo el tráfico entre
}
egress {
description = "Allow all trafic"
from_port = 0
to_port = 0
protocol = "-1" //Esto significa que especificamos todas las opciones posibles,
//Todos los puertos posibles
cidr_blocks = ["0.0.0.0/0"]
ipv6_cidr_blocks = ["::/0"]
}
tags= {
Name= "jeff security group"
}
}
data "aws_ami" "ubuntu" {
most_recent = "true"
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"]
}
resource "aws_network_interface" "jeffSA_network_interface" { #En este recurso, especificamos que es lo que deseamos conectar
subnet_id = aws_subnet.public_subnet.id //pasamos el id de la pública ya que es a la que deseamos que tenga acceso
private_ips = ["10.0.1.55"]
security_groups = [aws_security_group.web_server_sg.id] #Especificamos el security grupo al que deseamos conectar
tags = {
Name="jeffSA_network_interface"
}
}
resource "aws_instance" "ubuntu_instance_jeffSA" {
ami = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
#subnet_id = aws_subnet.public_subnet.id #Ya no definimos aca porque ya lo definimos en el network interface
#associate_public_ip_address = true #En mi caso, con esta linea asociamos la ip pública que aws nos da a la instancia
network_interface {
network_interface_id = aws_network_interface.jeffSA_network_interface.id
device_index = 0
}
user_data = <<-EOF
#!bin/bash
sudo apt update -y
sudo apt install nginx -y
sudo systemctl start nginx
EOF
tags = {
Name="ubuntu jeff instance"
}
}
resource "aws_eip" "jeffSA_elastic_ip" { #Recurso aws_eip es la elastic ip
associate_with_private_ip = tolist(aws_network_interface.jeffSA_network_interface.private_ips)[0]
network_interface = aws_network_interface.jeffSA_network_interface.id
instance = aws_instance.ubuntu_instance_jeffSA.id
tags = {
Name="jeffSA elastic ip"
}
}