AWS CloudFormation을(를) 사용하여 Amazon VPC 리소스 구성
이 섹션에서는 AWS CloudFormation을(를) 사용하여 Amazon VPC 리소스를 구성하는 예를 제공합니다. VPC를 사용하면 AWS 내에서 가상 네트워크를 생성할 수 있으며, 다음 코드 조각은 네트워킹 요구 사항에 맞게 VPC의 측면을 구성하는 방법을 보여 줍니다.
VPC에서 IPv6 외부 전용 인터넷 액세스 활성화
외부 전용 인터넷 게이트웨이를 사용하면 VPC 내의 인스턴스가 인터넷에 액세스할 수 있으며 인터넷의 리소스가 인스턴스와 통신하는 것을 방지할 수 있습니다. 다음 코드 조각은 VPC 내에서 IPv6 외부 전용 인터넷 액세스를 활성화합니다. AWS::EC2::VPC 리소스를 사용하여 IPv4 주소 범위가 10.0.0/16
인 VPC를 생성합니다. 라우팅 테이블은 AWS::EC2::RouteTable 리소스를 사용하여 이 VPC 리소스와 연결됩니다. 라우팅 테이블은 VPC 내 인스턴스의 경로를 관리합니다. AWS::EC2::EgressOnlyInternetGateway는 인바운드 트래픽을 차단하면서 VPC 내 인스턴스로부터의 아웃바운드 트래픽에 대해 IPv6 통신을 활성화하는 외부 전용 인터넷 게이트웨이를 생성하는 데 사용됩니다. AWS::EC2::Route 리소스는 모든 아웃바운드 IPv6 트래픽(::/0
)을 외부 전용 인터넷 게이트웨이로 보내는 IPv6 경로를 라우팅 테이블에 생성하도록 지정됩니다.
외부 전용 인터넷 게이트웨이에 대한 자세한 내용은 송신 전용 인터넷 게이트웨이를 사용하여 아웃바운드 IPv6 트래픽 활성화를 참조하세요.
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"
탄력적 네트워크 인터페이스(ENI) 템플릿 코드 조각
탄력적 네트워크 인터페이스(ENI)를 사용하여 Amazon EC2 인스턴스 생성
다음 예제 스니펫은 지정된 Amazon VPC 및 서브넷에서 AWS::EC2::Instance 리소스를 사용하여 Amazon EC2 인스턴스를 생성합니다. 인스턴스에 두 개의 네트워크 인터페이스(ENI)를 연결하고, 연결된 ENI를 통해 탄력적 IP 주소를 인스턴스에 연결하고, SSH 및 HTTP 액세스를 위한 보안 그룹을 구성합니다. 사용자 데이터는 인스턴스 생성 시 시작 구성의 일부로 인스턴스에 제공됩니다. 사용자 데이터에는 인스턴스에 전달되도록 base64
형식으로 인코딩된 스크립트가 포함되어 있습니다. 인스턴스가 시작되면 스크립트는 부트스트랩 프로세스의 일부로 자동으로 실행됩니다. ec2-net-utils
을(를) 설치하고 네트워크 인터페이스를 구성한 다음 HTTP 서비스를 시작합니다.
선택한 리전을 기반으로 적절한 Amazon Machine Image(AMI)를 결정하기 위해 코드 조각은 RegionMap
매핑에서 값을 조회하는 Fn::FindInMap
함수를 사용합니다. 이 매핑은 더 큰 템플릿에서 정의해야 합니다. 두 네트워크 인터페이스는 AWS::EC2::NetworkInterface 리소스를 사용하여 생성됩니다. 탄력적 IP 주소는 vpc
도메인에 할당된 AWS::EC2::EIP 리소스를 사용하여 지정됩니다. 해당 탄력적 IP 주소는 AWS::EC2::EIPAssociation 리소스를 사용하는 네트워크 인터페이스와 연결됩니다.
Outputs
섹션에서는 스택이 생성된 후 액세스하려는 값이나 리소스를 정의합니다. 이 코드 조각에서 정의된 출력은 InstancePublicIp
이며 스택에서 생성한 EC2 인스턴스의 퍼블릭 IP 주소를 나타냅니다. AWS CloudFormation 콘솔의 출력 탭이나 describe-stacks 명령을 사용하여 이 출력을 검색할 수 있습니다.
탄력적 네트워크 인터페이스에 대한 자세한 내용은 탄력적 네트워크 인터페이스를 참조하세요.
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