Configurar os recursos da Amazon VPC com o AWS CloudFormation
Esta seção fornece exemplos de como configurar os recursos da Amazon VPC usando o AWS CloudFormation. As VPCs permitem que você crie uma rede virtual na AWS, e esses snippets mostram como configurar aspectos das VPCs para atender aos seus requisitos de rede.
Trechos de exemplo
Habilitar o acesso à Internet IPv6 somente de saída em uma VPC
Um gateway da Internet somente de saída permite que instâncias dentro de uma VPC acessem a Internet e impeçam que recursos na Internet se comuniquem com as instâncias. O snippet a seguir permite o acesso à Internet IPv6 somente de saída de dentro de uma VPC. Ele cria uma VPC com um intervalo de endereços IPv4 de 10.0.0/16
usando um recurso AWS::EC2::VPC. Uma tabela de rotas é associada a esse recurso da VPC usando um recurso AWS::EC2::RouteTable. A tabela de rotas gerencia rotas para instâncias dentro da VPC. Um AWS::EC2::EgressOnlyInternetGateway é usado para criar um gateway da Internet somente de saída para permitir a comunicação IPv6 para tráfego de saída de instâncias dentro da VPC, evitando o tráfego de entrada. Um recurso AWS::EC2::Route é especificado para criar uma rota IPv6 na tabela de rotas que direciona todo o tráfego IPv6 de saída (::/0
) para o gateway da Internet somente de saída.
Para obter mais informações sobre gateways da Internet somente de saída, consulte Habilitar o tráfego IPv6 de saída usando gateways da Internet somente de saída.
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"
Trechos do modelo da interface de rede elástica (ENI)
Criar uma instância do Amazon EC2 com interfaces de rede elástica (ENIs) anexadas
O trecho de exemplo a seguir cria uma instância do Amazon EC2 usando um recurso AWS::EC2::Instance na sub-rede e na Amazon VPC especificada. Ele anexa duas interfaces de rede (ENIs) à instância, associa endereços IP elásticos às instâncias por meio dos ENIs anexados e configura o grupo de segurança para acesso SSH e HTTP. Os dados de usuário são fornecidos à instância como parte da configuração de execução quando a instância é criada. Os dados de usuário incluem um script codificado no formato base64
para garantir que sejam transmitidos para a instância. Quando a instância é executada, o script é executado automaticamente como parte do processo de bootstrapping. Ele instala ec2-net-utils
, configura as interfaces de rede e inicia o serviço HTTP.
Para determinar a imagem de máquina da Amazon (AMI) apropriada com base na região selecionada, o snippet usa uma função Fn::FindInMap
que pesquisa valores em um mapeamento RegionMap
. Esse mapeamento deve ser definido no modelo maior. As duas interfaces de rede são criadas usando recursos AWS::EC2::NetworkInterface. Os endereços IP elásticos são especificados usando os recursos AWS::EC2::EIP alocados ao domínio vpc
. Esses endereços IP elásticos são associados às interfaces de rede usando os recursos AWS::EC2::EIPAssociation.
A seção Outputs
define os valores ou recursos que você deseja acessar depois que a pilha é criada. Nesse snippet, a saída definida é InstancePublicIp
, que representa o endereço IP público da instância do EC2 criada pela pilha. É possível recuperar essa saída na guia Saída no console do AWS CloudFormation ou usando o comando describe-stacks.
Para obter mais informações sobre interfaces de rede elástica, consulte Interfaces de rede elástica.
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