AWS CloudFormation을(를) 사용하여 Amazon EC2 인스턴스 구성 - AWS CloudFormation

AWS CloudFormation을(를) 사용하여 Amazon EC2 인스턴스 구성

다음 코드 조각은 AWS CloudFormation을(를) 사용하여 Amazon EC2 인스턴스를 구성하는 방법을 보여 줍니다.

일반적인 Amazon EC2 구성

다음 코드 조각은 AWS CloudFormation을(를) 사용하는 Amazon EC2 인스턴스의 일반적인 구성을 보여 줍니다.

지정된 가용 영역에서 Amazon EC2 인스턴스 생성

다음 코드 조각은 AWS::EC2::Instance 리소스를 사용하여 지정된 가용 영역에서 Amazon EC2 인스턴스를 생성합니다. 가용 영역의 코드는 리전 코드와 문자 식별자를 조합한 것입니다. 단일 가용 영역에서 인스턴스를 시작할 수 있습니다.

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "AvailabilityZone": "aa-example-1a", "ImageId": "ami-1234567890abcdef0" } }

YAML

Ec2Instance: Type: AWS::EC2::Instance Properties: AvailabilityZone: aa-example-1a ImageId: ami-1234567890abcdef0

EBS 볼륨 및 사용자 데이터를 사용하여 태그가 지정된 Amazon EC2 인스턴스 구성

다음 코드 조각은 태그, EBS 볼륨 및 사용자 데이터를 사용하여 Amazon EC2 인스턴스를 생성합니다. AWS::EC2::Instance 리소스를 사용합니다. 동일한 템플릿에서 AWS::EC2::SecurityGroup 리소스, AWS::SNS::Topic 리소스 및 AWS::EC2::Volume 리소스를 정의해야 합니다. KeyName은(는) 템플릿의 Parameters 섹션에서 정의해야 합니다.

태그를 사용하면 용도, 소유자 또는 환경 등 원하는 기준에 따라 AWS 리소스를 분류할 수 있습니다. 사용자 데이터를 사용하면 시작 중에 인스턴스에 사용자 지정 스크립트 또는 데이터를 프로비저닝할 수 있습니다. 이 데이터는 초기화 중에 인스턴스에 대한 작업 자동화, 소프트웨어 구성, 패키지 설치 및 기타 작업을 용이하게 합니다.

리소스 태그 지정에 대한 자세한 내용은 Amazon EC2 리소스 태깅을 참조하세요.

사용자 데이터에 대한 자세한 내용은 인스턴스 메타데이터 및 사용자 데이터를 참조하세요.

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "SecurityGroups": [ { "Ref": "Ec2SecurityGroup" } ], "UserData": { "Fn::Base64": { "Fn::Join": [ ":", [ "PORT=80", "TOPIC=", { "Ref": "MySNSTopic" } ] ] } }, "InstanceType": "aa.size", "AvailabilityZone": "aa-example-1a", "ImageId": "ami-1234567890abcdef0", "Volumes": [ { "VolumeId": { "Ref": "MyVolumeResource" }, "Device": "/dev/sdk" } ], "Tags": [ { "Key": "Name", "Value": "MyTag" } ] } }

YAML

Ec2Instance: Type: AWS::EC2::Instance Properties: KeyName: !Ref KeyName SecurityGroups: - !Ref Ec2SecurityGroup UserData: Fn::Base64: Fn::Join: - ":" - - "PORT=80" - "TOPIC=" - !Ref MySNSTopic InstanceType: aa.size AvailabilityZone: aa-example-1a ImageId: ami-1234567890abcdef0 Volumes: - VolumeId: !Ref MyVolumeResource Device: "/dev/sdk" Tags: - Key: Name Value: MyTag

Amazon EC2 인스턴스 시작을 위한 사용자 데이터에 DynamoDB 테이블 이름 정의

다음 코드 조각은 Amazon EC2 인스턴스를 생성하고 시작 시 인스턴스에 전달할 DynamoDB 테이블 이름을 사용자 데이터에 정의합니다. AWS::EC2::Instance 리소스를 사용합니다. 사용자 데이터에 파라미터 또는 동적 값을 정의하여 시작 시 EC2 인스턴스를 전달할 수 있습니다.

사용자 데이터에 대한 자세한 내용은 인스턴스 메타데이터 및 사용자 데이터를 참조하세요.

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "TableName=", { "Ref": "DynamoDBTableName" } ] ] } }, "AvailabilityZone": "aa-example-1a", "ImageId": "ami-1234567890abcdef0" } }

YAML

Ec2Instance: Type: AWS::EC2::Instance Properties: UserData: Fn::Base64: Fn::Join: - '' - - 'TableName=' - Ref: DynamoDBTableName AvailabilityZone: aa-example-1a ImageId: ami-1234567890abcdef0

DeletionPolicy을(를) 사용하여 Amazon EBS 볼륨 생성

다음 코드 조각은 Amazon EC2 AWS::EC2::Volume 리소스를 사용하여 Amazon EBS 볼륨을 생성합니다. Size 또는 SnapshotID 속성을 사용하여 볼륨을 정의할 수 있지만 둘 다 사용할 수는 없습니다. 스택을 삭제할 때 볼륨의 스냅샷을 생성하도록 DeletionPolicy 속성이 설정됩니다.

DeletionPolicy 속성에 대한 자세한 내용은 DeletionPolicy 속성을 참조하세요.

Amazon EBS 볼륨 생성에 대한 자세한 내용은 Amazon EBS 볼륨 생성을 참조하세요.

JSON

이 코드 조각은 지정된 크기로 Amazon EBS 볼륨을 생성합니다. 크기는 10으로 설정되어 있지만 필요에 따라 조정할 수 있습니다. AWS::EC2::Volume 리소스를 사용하면 크기 또는 스냅샷 ID를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

"MyEBSVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": "10", "AvailabilityZone": { "Ref": "AvailabilityZone" } }, "DeletionPolicy": "Snapshot" }

이 코드 조각은 제공된 스냅샷 ID를 사용하여 Amazon EBS 볼륨을 생성합니다. AWS::EC2::Volume 리소스를 사용하면 크기 또는 스냅샷 ID를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

"MyEBSVolume": { "Type": "AWS::EC2::Volume", "Properties": { "SnapshotId" : "snap-1234567890abcdef0", "AvailabilityZone": { "Ref": "AvailabilityZone" } }, "DeletionPolicy": "Snapshot" }

YAML

이 코드 조각은 지정된 크기로 Amazon EBS 볼륨을 생성합니다. 크기는 10으로 설정되어 있지만 필요에 따라 조정할 수 있습니다. AWS::EC2::Volume 리소스를 사용하면 크기 또는 스냅샷 ID를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

MyEBSVolume: Type: AWS::EC2::Volume Properties: Size: 10 AvailabilityZone: Ref: AvailabilityZone DeletionPolicy: Snapshot

이 코드 조각은 제공된 스냅샷 ID를 사용하여 Amazon EBS 볼륨을 생성합니다. AWS::EC2::Volume 리소스를 사용하면 크기 또는 스냅샷 ID를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

MyEBSVolume: Type: AWS::EC2::Volume Properties: SnapshotId: snap-1234567890abcdef0 AvailabilityZone: Ref: AvailabilityZone DeletionPolicy: Snapshot

인스턴스의 블록 디바이스 매핑 지정

블록 디바이스 매핑은 인스턴스에 연결할 블록 디바이스(인스턴스 스토어 볼륨 및 EBS 볼륨 포함)를 정의합니다. AMI를 생성할 때 블록 디바이스 매핑을 지정하면 AMI에서 실행되는 모든 인스턴스가 해당 매핑을 사용할 수 있습니다. 또는 인스턴스를 실행할 때 블록 디바이스 매핑을 지정하여 해당 매핑이 인스턴스가 실행된 AMI에서 지정된 매핑을 재정의하도록 할 수 있습니다.

다음 템플릿 코드 조각을 사용하면 AWS::EC2::Instance 리소스의 BlockDeviceMappings 속성을 사용하여 EBS 또는 인스턴스 스토어 볼륨의 블록 디바이스 매핑을 지정할 수 있습니다.

블록 디바이스 매핑에 대한 자세한 내용은 Amazon EC2 사용 설명서블록 디바이스 매핑을 참조하세요.

두 EBS 볼륨의 블록 디바이스 매핑 지정

JSON

"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

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

인스턴스 스토어 볼륨의 인스턴스 블록 디바이스 매핑 지정

JSON

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

YAML

EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap - AWSRegionArch2AMI - !Ref AWS::Region - HVM64 KeyName: !Ref KeyName InstanceType: !Ref InstanceType SecurityGroups: - !Ref Ec2SecurityGroup BlockDeviceMappings: - DeviceName: /dev/sdc VirtualName: ephemeral0