/
03AWSCrearVPC_EC2Ubuntu.sh
169 lines (142 loc) · 6.23 KB
/
03AWSCrearVPC_EC2Ubuntu.sh
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
###########################################################
# Creación de una VPC, subredes,
# internet gateway y tabla de rutas
# Además creará una instancia EC2 Ubuntu Server 22.04
# con IP elástica
# en AWS con AWS CLI
#
# Utilizado para AWS Academy Learning Lab
#
# Autor: Javier Terán González
# Fecha: 22/10/2022
###########################################################
## Definición de variables
AWS_VPC_CIDR_BLOCK=10.22.0.0/16
AWS_Subred_CIDR_BLOCK=10.22.130.0/24
AWS_IP_UbuntuServer=10.22.130.100
AWS_IP_WindowsServer=10.22.130.200
###########################################################
## Crear una VPC (Virtual Private Cloud) con su etiqueta
## La VPC tendrá un bloque IPv4 proporcionado por el usuario y uno IPv6 de AWS ???
echo "Creando VPC..."
AWS_ID_VPC=$(aws ec2 create-vpc \
--cidr-block $AWS_VPC_CIDR_BLOCK \
--amazon-provided-ipv6-cidr-block \
--tag-specification ResourceType=vpc,Tags=[{Key=Name,Value=SRINN-vpc}] \
--query 'Vpc.{VpcId:VpcId}' \
--output text)
## Habilitar los nombres DNS para la VPC
aws ec2 modify-vpc-attribute \
--vpc-id $AWS_ID_VPC \
--enable-dns-hostnames "{\"Value\":true}"
## Crear una subred publica con su etiqueta
AWS_ID_SubredPublica=$(aws ec2 create-subnet \
--vpc-id $AWS_ID_VPC --cidr-block $AWS_Subred_CIDR_BLOCK \
--availability-zone us-east-1a \
--tag-specifications ResourceType=subnet,Tags=[{Key=Name,Value=SRINN-subred-publica}] \
--query 'Subnet.{SubnetId:SubnetId}' \
--output text)
## Habilitar la asignación automática de IPs públicas en la subred pública
aws ec2 modify-subnet-attribute \
--subnet-id $AWS_ID_SubredPublica \
--map-public-ip-on-launch
## Crear un Internet Gateway (Puerta de enlace) con su etiqueta
AWS_ID_InternetGateway=$(aws ec2 create-internet-gateway \
--tag-specifications ResourceType=internet-gateway,Tags=[{Key=Name,Value=SRINN-igw}] \
--query 'InternetGateway.{InternetGatewayId:InternetGatewayId}' \
--output text)
## Asignar el Internet gateway a la VPC
aws ec2 attach-internet-gateway \
--vpc-id $AWS_ID_VPC \
--internet-gateway-id $AWS_ID_InternetGateway
## Crear una tabla de rutas
AWS_ID_TablaRutas=$(aws ec2 create-route-table \
--vpc-id $AWS_ID_VPC \
--query 'RouteTable.{RouteTableId:RouteTableId}' \
--output text )
## Crear la ruta por defecto a la puerta de enlace (Internet Gateway)
aws ec2 create-route \
--route-table-id $AWS_ID_TablaRutas \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id $AWS_ID_InternetGateway
## Asociar la subred pública con la tabla de rutas
AWS_ROUTE_TABLE_ASSOID=$(aws ec2 associate-route-table \
--subnet-id $AWS_ID_SubredPublica \
--route-table-id $AWS_ID_TablaRutas \
--output text)
## Añadir etiqueta a la ruta por defecto
AWS_DEFAULT_ROUTE_TABLE_ID=$(aws ec2 describe-route-tables \
--filters "Name=vpc-id,Values=$AWS_ID_VPC" \
--query 'RouteTables[?Associations[0].Main != `flase`].RouteTableId' \
--output text) &&
aws ec2 create-tags \
--resources $AWS_DEFAULT_ROUTE_TABLE_ID \
--tags "Key=Name,Value=SRINN ruta por defecto"
## Añadir etiquetas a la tabla de rutas
aws ec2 create-tags \
--resources $AWS_ID_TablaRutas \
--tags "Key=Name,Value=SRINN-rtb-public"
###########################################################
## Crear un grupo de seguridad Ubuntu Server
echo "Creando grupo de seguridad Ubuntu Server..."
aws ec2 create-security-group \
--vpc-id $AWS_ID_VPC \
--group-name SRINNus-sg \
--description 'Grupo de seguridad SRINNus-sg'
AWS_CUSTOM_SECURITY_GROUP_ID=$(aws ec2 describe-security-groups \
--filters "Name=vpc-id,Values=$AWS_ID_VPC" \
--query 'SecurityGroups[?GroupName == `SRINNus-sg`].GroupId' \
--output text)
## Abrir los puertos de acceso a la instancia
aws ec2 authorize-security-group-ingress \
--group-id $AWS_CUSTOM_SECURITY_GROUP_ID \
--ip-permissions '[{"IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow SSH"}]}]'
aws ec2 authorize-security-group-ingress \
--group-id $AWS_CUSTOM_SECURITY_GROUP_ID \
--ip-permissions '[{"IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "Allow HTTP"}]}]'
## Añadirle etiqueta al grupo de seguridad
aws ec2 create-tags \
--resources $AWS_CUSTOM_SECURITY_GROUP_ID \
--tags "Key=Name,Value=SRINNus-sg"
###########################################################
## Crear una instancia EC2 (con una imagen de ubuntu 22.04 del 08/11/2023)
echo "Creando instancia EC2 Ubuntu"
AWS_AMI_Ubuntu_ID=ami-0fc5d935ebf8bc3bc
AWS_EC2_INSTANCE_ID=$(aws ec2 run-instances \
--image-id $AWS_AMI_Ubuntu_ID \
--instance-type t2.micro \
--key-name vockey \
--monitoring "Enabled=false" \
--security-group-ids $AWS_CUSTOM_SECURITY_GROUP_ID \
--subnet-id $AWS_ID_SubredPublica \
--user-data file://datosusuarioUbuntu.txt \
--private-ip-address $AWS_IP_UbuntuServer \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=SRINNus}]' \
--query 'Instances[0].InstanceId' \
--output text)
#echo $AWS_EC2_INSTANCE_ID
###########################################################
## Crear IP Estatica para la instancia Ubuntu. (IP elastica)
echo "Creando IP elastica Ubuntu"
AWS_IP_Fija_UbuntuServer=$(aws ec2 allocate-address --output text)
echo $AWS_IP_Fija_UbuntuServer
## Recuperar AllocationId de la IP elastica
AWS_IP_Fija_UbuntuServer_AllocationId=$(echo $AWS_IP_Fija_UbuntuServer | awk '{print $1}')
echo $AWS_IP_Fija_UbuntuServer_AllocationId
## Añadirle etiqueta a la ip elástica de Ubuntu
aws ec2 create-tags \
--resources $AWS_IP_Fija_UbuntuServer_AllocationId \
--tags "Key=Name,Value=SRINNus-ip"
##########################################################
## Asociar la ip elastica a la instancia Ubuntu
echo "Esperando a que la instancia esté disponible para asociar la IP elastica"
sleep 80
aws ec2 associate-address --instance-id $AWS_EC2_INSTANCE_ID --allocation-id $AWS_IP_Fija_UbuntuServer_AllocationId
##########################################################
## Mostrar las ips publicas de las instancias
echo "Mostrando las ips publicas de las instancias"
AWS_EC2_INSTANCE_PUBLIC_IP=$(aws ec2 describe-instances \
--query "Reservations[*].Instances[*].PublicIpAddress" \
--output=text) &&
echo $AWS_EC2_INSTANCE_PUBLIC_IP
##########################################################