Configuración de los recursos de Amazon VPC con AWS CloudFormation
En esta sección se proporcionan ejemplos para configurar los recursos de Amazon VPC con AWS CloudFormation. Las VPC le permiten crear una red virtual dentro de AWS, y estos fragmentos muestran cómo configurar algunos aspectos de las VPC para cumplir con sus requisitos de red.
Fragmentos de código de ejemplo
Habilitación del acceso a Internet solo de salida de direcciones IPv6 en una VPC
Una puerta de enlace de Internet de solo salida permite que las instancias de una VPC accedan a Internet e impiden que los recursos de Internet se comuniquen con las instancias. El siguiente fragmento habilita el acceso a Internet solo de salida de direcciones IPv6 desde una VPC. Crea una VPC con un rango de direcciones IPv4 de 10.0.0/16
con un recurso AWS::EC2::VPC. Se asocia una tabla de enrutamiento a este recurso de VPC mediante un recurso AWS::EC2::RouteTable. La tabla de enrutamiento administra las rutas de las instancias dentro de la VPC. Se utiliza un recurso AWS::EC2::EgressOnlyInternetGateway para crear una puerta de enlace de Internet solo de salida que permita la comunicación de las direcciones IPv6 para el tráfico saliente de las instancias de la VPC y, al mismo tiempo, evite el tráfico entrante. Se especifica un recurso AWS::EC2::Route para crear una ruta IPv6 en la tabla de enrutamiento que dirija todo el tráfico IPv6 saliente (::/0
) a la puerta de enlace de Internet solo de salida.
Para obtener más información sobre las puertas de enlace de Internet de solo salida, consulte Habilitación del tráfico IPv6 saliente mediante una puerta de enlace de Internet de solo salida.
JSON
"DefaultIpv6Route": { "Type": "AWS::EC2::Route", "Properties": { "DestinationIpv6CidrBlock": "::/0", "EgressOnlyInternetGatewayId": { "Ref": "EgressOnlyInternetGateway" }, "RouteTableId": { "Ref": "RouteTable" } } }, "EgressOnlyInternetGateway": { "Type": "AWS::EC2::EgressOnlyInternetGateway", "Properties": { "VpcId": { "Ref": "VPC" } } }, "RouteTable": { "Type": "AWS::EC2::RouteTable", "Properties": { "VpcId": { "Ref": "VPC" } } }, "VPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.0.0.0/16" } }
YAML
DefaultIpv6Route: Type: "AWS::EC2::Route" Properties: DestinationIpv6CidrBlock: "::/0" EgressOnlyInternetGatewayId: Ref: "EgressOnlyInternetGateway" RouteTableId: Ref: "RouteTable" EgressOnlyInternetGateway: Type: "AWS::EC2::EgressOnlyInternetGateway" Properties: VpcId: Ref: "VPC" RouteTable: Type: "AWS::EC2::RouteTable" Properties: VpcId: Ref: "VPC" VPC: Type: "AWS::EC2::VPC" Properties: CidrBlock: "10.0.0.0/16"
Fragmentos de código de plantillas de la Interfaz de red elástica (ENI)
Creación de una instancia de Amazon EC2 con interfaces de red elásticas (ENI) conectadas
En el siguiente fragmento de ejemplo se crea una instancia de Amazon EC2 con un recurso AWS::EC2::Instance en la VPC y subred de Amazon especificadas. Conecta dos interfaces de red (ENI) a la instancia, asocia direcciones IP elásticas a las instancias a través de las ENI conectadas y configura el grupo de seguridad para el acceso SSH y HTTP. Los datos de usuario se proporcionan a la instancia como parte de la configuración de lanzamiento cuando se crea la instancia. Los datos de usuario incluyen un script codificado en un formato base64
para garantizar que se transfiera a la instancia. Cuando se lanza la instancia, el script se ejecuta automáticamente como parte del proceso de arranque. Instala ec2-net-utils
, configura las interfaces de red e inicia el servicio HTTP.
Para determinar la imagen de máquina de Amazon (AMI) adecuada en función de la región seleccionada, el fragmento utiliza una función Fn::FindInMap
que busca valores en una asignación RegionMap
. Esta asignación debe definirse en la plantilla más grande. Las dos interfaces de red se crean con recursos AWS::EC2::NetworkInterface. Las direcciones IP elásticas se especifican mediante recursos AWS::EC2::EIP asignados al dominio vpc
. Estas direcciones IP elásticas se asocian a las interfaces de red mediante recursos AWS::EC2::EIPAssociation.
La sección Outputs
define valores o recursos a los que desea acceder después de que se haya creado la pila. En este fragmento, el resultado definido es InstancePublicIp
, que representa la dirección IP pública de la instancia de EC2 creada por la pila. Puede recuperar este resultado en la pestaña Salida, en la consola de AWS CloudFormation o mediante el comando describe-stacks.
Para obtener más información acerca de las interfaces de red, consulte Interfaces de red elásticas.
JSON
"Resources": { "ControlPortAddress": { "Type": "AWS::EC2::EIP", "Properties": { "Domain": "vpc" } }, "AssociateControlPort": { "Type": "AWS::EC2::EIPAssociation", "Properties": { "AllocationId": { "Fn::GetAtt": [ "ControlPortAddress", "AllocationId" ] }, "NetworkInterfaceId": { "Ref": "controlXface" } } }, "WebPortAddress": { "Type": "AWS::EC2::EIP", "Properties": { "Domain": "vpc" } }, "AssociateWebPort": { "Type": "AWS::EC2::EIPAssociation", "Properties": { "AllocationId": { "Fn::GetAtt": [ "WebPortAddress", "AllocationId" ] }, "NetworkInterfaceId": { "Ref": "webXface" } } }, "SSHSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "VpcId": { "Ref": "VpcId" }, "GroupDescription": "Enable SSH access via port 22", "SecurityGroupIngress": [ { "CidrIp": "0.0.0.0/0", "FromPort": 22, "IpProtocol": "tcp", "ToPort": 22 } ] } }, "WebSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "VpcId": { "Ref": "VpcId" }, "GroupDescription": "Enable HTTP access via user-defined port", "SecurityGroupIngress": [ { "CidrIp": "0.0.0.0/0", "FromPort": 80, "IpProtocol": "tcp", "ToPort": 80 } ] } }, "controlXface": { "Type": "AWS::EC2::NetworkInterface", "Properties": { "SubnetId": { "Ref": "SubnetId" }, "Description": "Interface for controlling traffic such as SSH", "GroupSet": [ { "Fn::GetAtt": [ "SSHSecurityGroup", "GroupId" ] } ], "SourceDestCheck": true, "Tags": [ { "Key": "Network", "Value": "Control" } ] } }, "webXface": { "Type": "AWS::EC2::NetworkInterface", "Properties": { "SubnetId": { "Ref": "SubnetId" }, "Description": "Interface for web traffic", "GroupSet": [ { "Fn::GetAtt": [ "WebSecurityGroup", "GroupId" ] } ], "SourceDestCheck": true, "Tags": [ { "Key": "Network", "Value": "Web" } ] } }, "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "AMI" ] }, "KeyName": { "Ref": "KeyName" }, "NetworkInterfaces": [ { "NetworkInterfaceId": { "Ref": "controlXface" }, "DeviceIndex": "0" }, { "NetworkInterfaceId": { "Ref": "webXface" }, "DeviceIndex": "1" } ], "Tags": [ { "Key": "Role", "Value": "Test Instance" } ], "UserData": { "Fn::Base64": { "Fn::Sub": "#!/bin/bash -xe\nyum install ec2-net-utils -y\nec2ifup eth1\nservice httpd start\n" } } } } }, "Outputs": { "InstancePublicIp": { "Description": "Public IP Address of the EC2 Instance", "Value": { "Fn::GetAtt": [ "Ec2Instance", "PublicIp" ] } } }
YAML
Resources: ControlPortAddress: Type: 'AWS::EC2::EIP' Properties: Domain: vpc AssociateControlPort: Type: 'AWS::EC2::EIPAssociation' Properties: AllocationId: Fn::GetAtt: - ControlPortAddress - AllocationId NetworkInterfaceId: Ref: controlXface WebPortAddress: Type: 'AWS::EC2::EIP' Properties: Domain: vpc AssociateWebPort: Type: 'AWS::EC2::EIPAssociation' Properties: AllocationId: Fn::GetAtt: - WebPortAddress - AllocationId NetworkInterfaceId: Ref: webXface SSHSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: Ref: VpcId GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - CidrIp: 0.0.0.0/0 FromPort: 22 IpProtocol: tcp ToPort: 22 WebSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: VpcId: Ref: VpcId GroupDescription: Enable HTTP access via user-defined port SecurityGroupIngress: - CidrIp: 0.0.0.0/0 FromPort: 80 IpProtocol: tcp ToPort: 80 controlXface: Type: 'AWS::EC2::NetworkInterface' Properties: SubnetId: Ref: SubnetId Description: Interface for controlling traffic such as SSH GroupSet: - Fn::GetAtt: - SSHSecurityGroup - GroupId SourceDestCheck: true Tags: - Key: Network Value: Control webXface: Type: 'AWS::EC2::NetworkInterface' Properties: SubnetId: Ref: SubnetId Description: Interface for web traffic GroupSet: - Fn::GetAtt: - WebSecurityGroup - GroupId SourceDestCheck: true Tags: - Key: Network Value: Web Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: Fn::FindInMap: - RegionMap - Ref: AWS::Region - AMI KeyName: Ref: KeyName NetworkInterfaces: - NetworkInterfaceId: Ref: controlXface DeviceIndex: "0" - NetworkInterfaceId: Ref: webXface DeviceIndex: "1" Tags: - Key: Role Value: Test Instance UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum install ec2-net-utils -y ec2ifup eth1 service httpd start Outputs: InstancePublicIp: Description: Public IP Address of the EC2 Instance Value: Fn::GetAtt: - Ec2Instance - PublicIp