메뉴
AWS CloudFormation
사용 설명서 (API Version 2010-05-15)

Amazon EC2 템플릿 조각

EC2 블록 디바이스 매핑 예제

블록 디바이스 매핑 지원 EC2 인스턴스

JSON

Copy
"Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "KeyName" : { "Ref" : "KeyName" }, "InstanceType" : { "Ref" : "InstanceType" }, "SecurityGroups" : [{ "Ref" : "Ec2SecurityGroup" }], "BlockDeviceMappings" : [ { "DeviceName" : "/dev/sda1", "Ebs" : { "VolumeSize" : "50" } },{ "DeviceName" : "/dev/sdm", "Ebs" : { "VolumeSize" : "100" } } ] } }

YAML

Copy
EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap [ AWSRegionArch2AMI, !Ref 'AWS::Region' , !FindInMap [ AWSInstanceType2Arch, !Ref InstanceType, Arch ] ] KeyName: !Ref KeyName InstanceType: !Ref InstanceType SecurityGroups: - !Ref Ec2SecurityGroup BlockDeviceMappings: - DeviceName: /dev/sda1 Ebs: VolumeSize: 50 - DeviceName: /dev/sdm Ebs: VolumeSize: 100

휘발성 드라이브 지원 EC2 인스턴스

JSON

Copy
"Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, "PV64" ]}, "KeyName" : { "Ref" : "KeyName" }, "InstanceType" : "m1.small", "SecurityGroups" : [{ "Ref" : "Ec2SecurityGroup" }], "BlockDeviceMappings" : [ { "DeviceName" : "/dev/sdc", "VirtualName" : "ephemeral0" } ] } }

YAML

Copy
EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap [ AWSRegionArch2AMI, !Ref 'AWS::Region', PV64 ] KeyName: !Ref KeyName InstanceType: m1.small SecurityGroups: - !Ref Ec2SecurityGroup BlockDeviceMappings: - DeviceName: /dev/sdc VirtualName: ephemeral0

AWS::EC2::EIP 코드 조각을 사용하여 Amazon EC2 탄력적 IP 할당

이 예에서는 Amazon EC2 탄력적 IP 주소를 할당한 후 AWS::EC2::EIP 리소스를 사용하여 Amazon EC2 인스턴스에 해당 주소를 할당하는 방법을 보여줍니다.

JSON

Copy
"MyEIP" : { "Type" : "AWS::EC2::EIP", "Properties" : { "InstanceId" : { "Ref" : "logical name of an AWS::EC2::Instance resource" } } }

YAML

Copy
MyEIP: Type: AWS::EC2::EIP Properties: InstanceId: !Ref Logical name of an AWS::EC2::Instance resource

AWS::EC2::EIPAssociation 코드 조각을 사용하여 Amazon EC2 인스턴스에 기존 탄력적 IP 할당

이 예에서는 AWS::EC2::EIPAssociation 리소스를 사용하여 Amazon EC2 인스턴스에 기존 Amazon EC2 탄력적 IP 주소를 할당하는 방법을 보여줍니다.

JSON

Copy
"IPAssoc" : { "Type" : "AWS::EC2::EIPAssociation", "Properties" : { "InstanceId" : { "Ref" : "logical name of an AWS::EC2::Instance resource" }, "EIP" : "existing Elastic IP address" } }

YAML

Copy
IPAssoc: Type: AWS::EC2::EIPAssociation Properties: InstanceId: !Ref Logical name of an AWS::EC2::Instance resource EIP: existing Elastic IP Address

AWS::EC2::EIPAssociation 코드 조각을 사용하여 Amazon EC2 인스턴스에 기존 VPC 탄력적 IP 할당

이 예에서는 AWS::EC2::EIPAssociation 리소스를 사용하여 Amazon EC2 인스턴스에 기존 탄력적 IP 주소를 할당하는 방법을 보여줍니다.

JSON

Copy
"VpcIPAssoc" : { "Type" : "AWS::EC2::EIPAssociation", "Properties" : { "InstanceId" : { "Ref" : "logical name of an AWS::EC2::Instance resource" }, "AllocationId" : "existing VPC Elastic IP allocation ID" } }

YAML

Copy
VpcIPAssoc: Type: AWS::EC2::EIPAssociation Properties: InstanceId: !Ref Logical name of an AWS::EC2::Instance resource AllocationId: Existing VPC Elastic IP allocation ID

탄력적 네트워크 인터페이스(ENI) 템플릿 조각

VPC_EC2_Instance_With_ENI

탄력적 네트워크 인터페이스(ENI) 두 개로 인스턴스를 생성하는 방법을 보여주는 샘플 템플릿입니다. 이 샘플에서는 VPC를 이미 생성했다고 가정합니다.

JSON

Copy
"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" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" } ] } }, "WebSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "VpcId" : { "Ref" : "VpcId" }, "GroupDescription" : "Enable HTTP access via user defined port", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : 80, "ToPort" : 80, "CidrIp" : "0.0.0.0/0" } ] } }, "controlXface" : { "Type" : "AWS::EC2::NetworkInterface", "Properties" : { "SubnetId" : { "Ref" : "SubnetId" }, "Description" :"Interface for control traffic such as SSH", "GroupSet" : [ {"Ref" : "SSHSecurityGroup"} ], "SourceDestCheck" : "true", "Tags" : [ {"Key" : "Network", "Value" : "Control"}] } }, "webXface" : { "Type" : "AWS::EC2::NetworkInterface", "Properties" : { "SubnetId" : { "Ref" : "SubnetId" }, "Description" :"Interface for web traffic", "GroupSet" : [ {"Ref" : "WebSecurityGroup"} ], "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::Join" : ["",[ "#!/bin/bash -ex","\n", "\n","yum install ec2-net-utils -y","\n", "ec2ifup eth1","\n", "service httpd start"]]} } } } }

YAML

Copy
Resources: ControlPortAddress: Type: AWS::EC2::EIP Properties: Domain: vpc AssociateControlPort: Type: AWS::EC2::EIPAssociation Properties: AllocationId: !GetAtt ControlPortAddress.AllocationId NetworkInterfaceId: !Ref controlXface WebPortAddress: Type: AWS::EC2::EIP Properties: Domain: vpc AssociateWebPort: Type: AWS::EC2::EIPAssociation Properties: AllocationId: !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: - !Ref SSHSecurityGroup SourceDestCheck: true Tags: - Key: Network Value: Control webXface: Type: AWS::EC2::NetworkInterface Properties: SubnetId: !Ref SubnetId Description: Interface for controlling traffic such as SSH GroupSet: - !Ref WebSecurityGroup SourceDestCheck: true Tags: - Key: Network Value: Web Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: !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

Amazon EC2 인스턴스 리소스

이 코드 조작은 간단한 AWS::EC2::Instance 리소스를 보여줍니다.

JSON

Copy
"MyInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "AvailabilityZone" : "us-east-1a", "ImageId" : "ami-20b65349" } }

YAML

Copy
MyInstance: Type: AWS::EC2::Instance Properties: AvailabilityZone: us-east-1a ImageId: ami-20b65349

볼륨, 태그 및 사용자 데이터 속성을 포함하는 Amazon EC2 인스턴스

이 코드 조각은 Amazon EC2 볼륨, 태그 및 사용자 데이터 속성을 각각 하나씩 포함하는 AWS::EC2::Instance 리소스를 보여줍니다. AWS::EC2::SecurityGroup 리소스, AWS::SNS::Topic 리소스 및 AWS::EC2::Volume 리소스를 모두 동일한 템플릿에 정의해야 합니다. 또한 KeyName에 대한 참조는 템플릿의 [Parameters] 섹션에 정의되어야 하는 파라미터입니다.

JSON

Copy
"MyInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "KeyName" : { "Ref" : "KeyName" }, "SecurityGroups" : [ { "Ref" : "logical name of AWS::EC2::SecurityGroup resource" } ], "UserData" : { "Fn::Base64" : { "Fn::Join" : [ ":", [ "PORT=80", "TOPIC=", { "Ref" : "logical name of an AWS::SNS::Topic resource" } ] ] } }, "InstanceType" : "m1.small", "AvailabilityZone" : "us-east-1a", "ImageId" : "ami-1e817677", "Volumes" : [ { "VolumeId" : { "Ref" : "logical name of AWS::EC2::Volume resource" }, "Device" : "/dev/sdk" } ], "Tags" : [ { "Key" : "Name", "Value" : "MyTag" } ] } }

YAML

Copy
MyInstance: Type: AWS::EC2::Instance Properties: KeyName: !Ref KeyName SecurityGroups: - !Ref logical name of AWS::EC2::SecurityGroup resource UserData: Fn::Base64: !Sub | PORT=80 TOPIC=${ logical name of an AWS::SNS::Topic resource } InstanceType: m1.small AvailabilityZone: us-east-1a ImageId: ami-1e817677 Volumes: - VolumeId: !Ref logical name of AWS::EC2::Volume resource Device: /dev/sdk Tags: - Key: Name Value: MyTag

Amazon SimpleDB 도메인을 포함하는 Amazon EC2 인스턴스 리소스

이 코드 조각은 UserData에 Amazon SimpleDB 도메인이 지정되어 있는 AWS::EC2::Instance 리소스를 보여줍니다.

JSON

Copy
"MyInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "Domain=", { "Ref" : "logical name of an AWS::SDB::Domain resource" } ] ] } }, "AvailabilityZone" : "us-east-1a", "ImageId" : "ami-20b65349" } }

YAML

Copy
MyInstance: Type: AWS::EC2::Instance Properties: UserData: Fn::Base64: !Sub | Domain=${ logical name of an AWS::SDB::Domain resource } AvailabilityZone: us-east-1a ImageId: ami-20b65349

두 CIDR 범위 수신 규칙을 포함하는 Amazon EC2 보안 그룹 리소스

이 코드 조각은 지정된 포트에서 TCP 프로토콜에 지정된 CIDR 범위에 대한 액세스 권한을 부여하는 두 수신 규칙을 설명하는 AWS::EC2::SecurityGroup 리소스를 보여줍니다.

JSON

Copy
"ServerSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "allow connections from specified CIDR ranges", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0" },{ "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "192.168.1.1/32" } ] } }

YAML

Copy
ServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: allow connections from specified CIDR ranges SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 192.168.1.1/32

두 보안 그룹 수신 규칙을 포함하는 Amazon EC2 보안 그룹 리소스

이 코드 조각은 두 보안 그룹 수신 규칙을 설명하는 AWS::EC2::SecurityGroup 리소스를 보여줍니다. 첫 번째 수신 규칙은 포트 22의 TCP 프로토콜에 대해 1234-5678-9012 AWS 계정이 소유한 기본 보안 그룹 myadminsecuritygroup에 대한 액세스 권한을 부여합니다. 두 번째 수신 규칙은 포트 80의 TCP에 대해 보안 그룹 mysecuritygroupcreatedincfn에 대한 액세스 권한을 부여합니다. 이 수신 규칙은 Ref 내장 함수를 사용하여 동일한 템플릿에서 생성되고 논리적 이름이 mysecuritygroupcreatedincfn인 보안 그룹을 참조합니다. SourceSecurityGroupNameSourceSecurityGroupOwnerId 속성 모두에 대해 값을 선언해야 합니다.

JSON

Copy
"ServerSecurityGroupBySG" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "allow connections from specified source security group", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "SourceSecurityGroupName" : "myadminsecuritygroup", "SourceSecurityGroupOwnerId" : "123456789012" }, { "IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "SourceSecurityGroupName" : {"Ref" : "mysecuritygroupcreatedincfn"} } ] } }

YAML

Copy
ServerSecurityGroupBySG: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: allow connections from specified source security group SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 SourceSecurityGroupName: myadminsecuritygroup SourceSecurityGroupOwnerId: 123456789012 - IpProtocol: tcp FromPort: 80 ToPort: 80 SourceSecurityGroupName: !Ref mysecuritygroupcreatedincfn

LoadBalancer 수신 규칙을 포함하는 Amazon EC2 보안 그룹 리소스

이 코드 조각은 포트 80의 TCP에 대해 LoadBalancer myELB에 대한 액세스 권한을 부여하는 보안 그룹 수신 규칙을 포함하는 AWS::EC2::SecurityGroup 리소스를 보여줍니다. 이 규칙은 myELB 리소스의 SourceSecurityGroup.OwnerAliasSourceSecurityGroup.GroupName 속성을 사용하여 LoadBalancer의 소스 보안 그룹을 지정합니다.

JSON

Copy
"myELB" : { "Type" : "AWS::ElasticLoadBalancing::LoadBalancer", "Properties" : { "AvailabilityZones" : [ "us-east-1a" ], "Listeners" : [ { "LoadBalancerPort" : "80", "InstancePort" : "80", "Protocol" : "HTTP" } ] } }, "ELBIngressGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "ELB ingress group", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "SourceSecurityGroupOwnerId" : {"Fn::GetAtt" : ["myELB", "SourceSecurityGroup.OwnerAlias"]}, "SourceSecurityGroupName" : {"Fn::GetAtt" : ["myELB", "SourceSecurityGroup.GroupName"]} } ] }

YAML

Copy
myELB: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: AvailabilityZones: - us-east-1a Listeners: - LoadBalancerPort: 80 InstancePort: 80 Protocol: HTTP ELBIngressGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: ELB ingress group SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 SourceSecurityGroupOwnerId: !GetAtt myELB.SourceSecurityGroup.OwnerAlias SourceSecurityGroupName: !GetAtt myELB.SourceSecurityGroup.GroupName

AWS::EC2::SecurityGroupIngress를 사용하여 상호 참조하는 Amazon EC2 보안 그룹 리소스 생성

이 코드 조각은 EC2 보안 그룹 SGroup1 및 SGroup2에 상호 수신 규칙을 추가하는 두 AWS::EC2::SecurityGroupIngress 리소스를 보여줍니다. SGroup1Ingress 리소스는 SGroup2에서 TCP/IP 포트 80을 경유하여 SGroup1로 수신하도록 허용합니다. SGroup2Ingress 리소스는 SGroup1에서 TCP/IP 포트 80을 경유하여 SGroup2로 수신하도록 허용합니다.

참고

Amazon VPC를 사용 중인 경우 AWS::EC2::SecurityGroup 리소스를 사용하고 VpcId 속성을 지정합니다.

JSON

Copy
"SGroup1" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "EC2 Instance access" } }, "SGroup2" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "EC2 Instance access" } }, "SGroup1Ingress" : { "Type" : "AWS::EC2::SecurityGroupIngress", "Properties" : { "GroupName" : { "Ref" : "SGroup1" }, "IpProtocol" : "tcp", "ToPort" : "80", "FromPort" : "80", "SourceSecurityGroupName" : { "Ref" : "SGroup2" } } }, "SGroup2Ingress" : { "Type" : "AWS::EC2::SecurityGroupIngress", "Properties" : { "GroupName" : { "Ref" : "SGroup2" }, "IpProtocol" : "tcp", "ToPort" : "80", "FromPort" : "80", "SourceSecurityGroupName" : { "Ref" : "SGroup1" } } }

YAML

Copy
SGroup1: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: EC2 Instance access SGroup2: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: EC2 Instance access SGroup1Ingress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupName: !Ref SGroup1 IpProtocol: tcp ToPort: 80 FromPort: 80 SourceSecurityGroupName: !Ref SGroup2 SGroup2Ingress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupName: !Ref SGroup2 IpProtocol: tcp ToPort: 80 FromPort: 80 SourceSecurityGroupName: !Ref SGroup1

Amazon EC2 볼륨 리소스

이 코드 조각은 DeletionPolicy 속성이 스냅샷으로 설정된 간단한 Amazon EC2 볼륨 리소스를 보여줍니다. 스냅샷 DeletionPolicy 세트를 사용하여 AWS CloudFormation에서는 스택 삭제 중에 이 볼륨을 삭제하기 전에 스냅샷을 생성합니다. SnapShotId 또는 Size에 대한 값 중 하나 또는 둘 모두를 지정해야 합니다. 필요 없는 값을 제거합니다.

JSON

Copy
"MyEBSVolume" : { "Type" : "AWS::EC2::Volume", "Properties" : { "Size" : "specify a size if no SnapShotId", "SnapshotId" : "specify a SnapShotId if no Size", "AvailabilityZone" : { "Ref" : "AvailabilityZone" } }, "DeletionPolicy" : "Snapshot" }

YAML

Copy
MyEBSVolume: Type: AWS::EC2::Volume Properties: Size: specify a size if no SnapshotId SnapshotId: specify a SnapShotId if no Size AvailabilityZone: !Ref AvailabilityZone DeletionPolicy: Snapshot

Amazon EC2 VolumeAttachment 리소스

이 코드 조각은 미국 동부(버지니아 북부) 리전에서 Amazon Linux AMI를 사용하는 Amazon EC2 인스턴스, IP 주소에 대한 SSH 액세스를 허용하는 EC2 보안 그룹, 크기가 100GB이고 EC2 인스턴스와 동일한 가용 영역에 있는 새 Amazon EBS 볼륨, 새 볼륨을 EC2 인스턴스에 연결하는 볼륨 연결 등과 같은 리소스를 보여줍니다.

JSON

Copy
"Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "ImageId" : "ami-76f0061f" } }, "InstanceSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable SSH access via port 22", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0" } ] } }, "NewVolume" : { "Type" : "AWS::EC2::Volume", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "Ec2Instance", "AvailabilityZone" ]}, } }, "MountPoint" : { "Type" : "AWS::EC2::VolumeAttachment", "Properties" : { "InstanceId" : { "Ref" : "Ec2Instance" }, "VolumeId" : { "Ref" : "NewVolume" }, "Device" : "/dev/sdh" } } }

YAML

Copy
Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: SecurityGroups: - !Ref InstanceSecurityGroup ImageId: ami-76f0061f InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 NewVolume: Type: AWS::EC2::Volume Properties: Size: 100 AvailabilityZone: !GetAtt Ec2Instance.AvailabilityZone MountPoint: Type: AWS::EC2::VolumeAttachment Properties: InstanceId: !Ref Ec2Instance VolumeId: !Ref NewVolume Device: /dev/sdh

기본 VPC 보안 그룹의 Amazon EC2 인스턴스

VPC를 생성할 때마다 AWS에서 해당 VPC에 대한 기본 리소스(예: 보안 그룹)를 자동으로 생성합니다. 하지만 AWS CloudFormation 템플릿에서 VPC를 정의하는 시점에는 이 기본 리소스의 물리적 ID가 아직 없습니다. ID를 얻으려면 Fn::GetAtt 내장 함수를 사용합니다. 이렇게 하면 템플릿에서 새 리소스를 생성하는 대신 기본 리소스를 사용할 수 있습니다. 예를 들어, 다음 템플릿 조각은 myVPC VPC의 기본 보안 그룹을 myInstance Amazon EC2 인스턴스와 연결합니다.

JSON

Copy
"myVPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": {"Ref": "myVPCCIDRRange"}, "EnableDnsSupport": false, "EnableDnsHostnames": false, "InstanceTenancy": "default" } }, "myInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId": { "Fn::FindInMap": ["AWSRegionToAMI",{"Ref": "AWS::Region"},"64"] }, "SecurityGroupIds" : [{"Fn::GetAtt": ["myVPC", "DefaultSecurityGroup"]}], "SubnetId" : {"Ref" : "mySubnet"} } }

YAML

Copy
myVPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref myVPCCIDRRange EnableDnsSupport: false EnableDnsHostnames: false InstanceTenancy: default myInstance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap [ AWSRegionToAMI , !Ref 'AWS::Region', 64 ] SecurityGroupIds: - !GetAtt myVPC.DefaultSecurityGroup SubnetId: !Ref mySubnet