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