Seleccionar página

Es muy importante antes de comenzar a crear recursos de AWS en un VPC segmentar las redes que van a ser necesarias para el cometido final o para poder cumplir los objetivos de la plataforma. Normalmente como regla general yo creo una subred con acceso público y otra privada. El objetivo es crear 6 subnets, 2 en cada zona de disponibilidad, una con acceso público, y otra con acceso privado. De esta forma consigo una estructura VPC bastante flexible y que puede crecer todo lo que quiera y según las necesidades. También ayuda a determinar el tipo de acceso que requieren los recursos que voy a soltar en dicha VPC y me pregunta inicial siempre es ¿Este recurso necesita acceso público o no? Así que en función de la respuesta lo creo en una subred o en otra. Y luego a crecer en horizontal con las zonas de disponibilidad. Para mi esta es una regla básica cuando comienzo cualquier proyecto en AWS.

Para ayudar a la creación estas subredes empleo CloudFormation, más que nada, para no repetir la tarea en cada nuevo despliegue así que comparto con vosotros mi plantilla JSON CloudFormation para que también comencéis con buen pie vuestro proyecto en AWS.

Tengo que añadir que lo ideal es no dar acceso directo a internet a través de la red privada. Por lo que la salida a internet de las instancias que se encuentran en la red privada deberá realizarse mediante el servicio NAT Gateway.

{
 "AWSTemplateFormatVersion": "2010-09-09",
 "Resources": {
 "VPC": {
 "Type": "AWS::EC2::VPC",
 "Properties": {
 "CidrBlock": "172.31.0.0/16",
 "EnableDnsSupport": "true",
 "EnableDnsHostnames": "true",
 "InstanceTenancy": "default",
 "Tags": [
 {
 "Key": "Name",
 "Value": "Main VPC"
 }
 ]
 },
 "Metadata": {
 "AWS::CloudFormation::Designer": {
 "id": "88d234eb-38eb-4b35-8fd2-57ffe76e7922"
 }
 }
 },
 "PrivateSubnetA": {
 "Type": "AWS::EC2::Subnet",
 "Properties": {
 "VpcId": {
 "Ref": "VPC"
 },
 "CidrBlock": "172.31.0.0/20",
 "AvailabilityZone": "eu-west-1a",
 "Tags": [
 {
 "Key": "Name",
 "Value": "Private Subnet A"
 }
 ]
 },
 "Metadata": {
 "AWS::CloudFormation::Designer": {
 "id": "6b88e843-b2ab-421b-b1bb-b3b4037911ca"
 }
 }
 },
 "PrivateSubnetB": {
 "Type": "AWS::EC2::Subnet",
 "Properties": {
 "VpcId": {
 "Ref": "VPC"
 },
 "CidrBlock": "172.31.16.0/20",
 "AvailabilityZone": "eu-west-1b",
 "Tags": [
 {
 "Key": "Name",
 "Value": "Private Subnet B"
 }
 ]
 },
 "Metadata": {
 "AWS::CloudFormation::Designer": {
 "id": "553198f9-d5f3-4eef-ac64-b2c1b4b96bf4"
 }
 }
 },
 "PrivateSubnetC": {
 "Type": "AWS::EC2::Subnet",
 "Properties": {
 "VpcId": {
 "Ref": "VPC"
 },
 "CidrBlock": "172.31.32.0/20",
 "AvailabilityZone": "eu-west-1c",
 "Tags": [
 {
 "Key": "Name",
 "Value": "Private Subnet C"
 }
 ]
 },
 "Metadata": {
 "AWS::CloudFormation::Designer": {
 "id": "8f0df4e3-c376-4673-9c4d-6c351dc6b8cd"
 }
 }
 },
 "PublicSubnetA": {
 "Type": "AWS::EC2::Subnet",
 "Properties": {
 "VpcId": {
 "Ref": "VPC"
 },
 "CidrBlock": "172.31.48.0/20",
 "AvailabilityZone": "eu-west-1a",
 "Tags": [
 {
 "Key": "Name",
 "Value": "Public Subnet A"
 }
 ]
 },
 "Metadata": {
 "AWS::CloudFormation::Designer": {
 "id": "0d33e3a0-d288-4f0d-adfa-c14c22d1ef3e"
 }
 }
 },
 "PublicSubnetB": {
 "Type": "AWS::EC2::Subnet",
 "Properties": {
 "VpcId": {
 "Ref": "VPC"
 },
 "CidrBlock": "172.31.64.0/20",
 "AvailabilityZone": "eu-west-1b",
 "Tags": [
 {
 "Key": "Name",
 "Value": "Public Subnet B"
 }
 ]
 },
 "Metadata": {
 "AWS::CloudFormation::Designer": {
 "id": "c7baafbf-b7b0-456b-a5e6-ba1f943e385e"
 }
 }
 },
 "PublicSubnetC": {
 "Type": "AWS::EC2::Subnet",
 "Properties": {
 "VpcId": {
 "Ref": "VPC"
 },
 "CidrBlock": "172.31.80.0/20",
 "AvailabilityZone": "eu-west-1c",
 "Tags": [
 {
 "Key": "Name",
 "Value": "Public Subnet C"
 }
 ]
 },
 "Metadata": {
 "AWS::CloudFormation::Designer": {
 "id": "d462f28a-35da-4422-ae59-92b12319a911"
 }
 }
 }
 },
 "Metadata": {
 "AWS::CloudFormation::Designer": {
 "88d234eb-38eb-4b35-8fd2-57ffe76e7922": {
 "size": {
 "width": 630,
 "height": 460
 },
 "position": {
 "x": 60,
 "y": 90
 },
 "z": 1,
 "embeds": [
 "d462f28a-35da-4422-ae59-92b12319a911",
 "c7baafbf-b7b0-456b-a5e6-ba1f943e385e",
 "0d33e3a0-d288-4f0d-adfa-c14c22d1ef3e",
 "8f0df4e3-c376-4673-9c4d-6c351dc6b8cd",
 "553198f9-d5f3-4eef-ac64-b2c1b4b96bf4",
 "6b88e843-b2ab-421b-b1bb-b3b4037911ca"
 ]
 },
 "d462f28a-35da-4422-ae59-92b12319a911": {
 "size": {
 "width": 150,
 "height": 150
 },
 "position": {
 "x": 510,
 "y": 360
 },
 "z": 2,
 "parent": "88d234eb-38eb-4b35-8fd2-57ffe76e7922",
 "embeds": []
 },
 "c7baafbf-b7b0-456b-a5e6-ba1f943e385e": {
 "size": {
 "width": 150,
 "height": 150
 },
 "position": {
 "x": 510,
 "y": 150
 },
 "z": 2,
 "parent": "88d234eb-38eb-4b35-8fd2-57ffe76e7922",
 "embeds": []
 },
 "0d33e3a0-d288-4f0d-adfa-c14c22d1ef3e": {
 "size": {
 "width": 150,
 "height": 150
 },
 "position": {
 "x": 300,
 "y": 360
 },
 "z": 2,
 "parent": "88d234eb-38eb-4b35-8fd2-57ffe76e7922",
 "embeds": []
 },
 "8f0df4e3-c376-4673-9c4d-6c351dc6b8cd": {
 "size": {
 "width": 150,
 "height": 150
 },
 "position": {
 "x": 90,
 "y": 360
 },
 "z": 2,
 "parent": "88d234eb-38eb-4b35-8fd2-57ffe76e7922",
 "embeds": []
 },
 "553198f9-d5f3-4eef-ac64-b2c1b4b96bf4": {
 "size": {
 "width": 150,
 "height": 150
 },
 "position": {
 "x": 300,
 "y": 150
 },
 "z": 2,
 "parent": "88d234eb-38eb-4b35-8fd2-57ffe76e7922",
 "embeds": []
 },
 "6b88e843-b2ab-421b-b1bb-b3b4037911ca": {
 "size": {
 "width": 150,
 "height": 150
 },
 "position": {
 "x": 90,
 "y": 150
 },
 "z": 2,
 "parent": "88d234eb-38eb-4b35-8fd2-57ffe76e7922",
 "embeds": []
 }
 }
 },
 "Parameters": {
 "VpcId": {
 "Type": "AWS::EC2::VPC::Id",
 "Description": "VpcId of your existing Virtual Private Cloud (VPC)"
 }
 }
}