CloudFormation 개념
AWS CloudFormation을 사용하는 경우에는 템플릿 및 스택으로 작업한다. 템플릿을 생성하여 AWS 리소스와 해당 속성에 대해 설명한다. 스택을 생성할 때마다 CloudFormation에서 템플릿에 설명된 리소스를 프로비저닝한다.
1. 템플릿
CloudFormation 템플릿은 JSON 또는 YAML 형식의 텍스트 파일이다. .json
, .yaml
, .template
또는 .txt
등 모든 확장명으로 파일을 저장할 수 있다. CloudFormation에서는 템플릿을 AWS 리소스 구축을 위한 블루프린트로 사용한다. 예를 들어, 템플릿에서 인스턴스 유형, AMI ID, 블록 디바이스 매핑, Amazon EC2 키 페어 이름 등과 같은 Amazon EC2 인스턴스를 설명할 수 있다. 스택을 생성할 때마다 CloudFormation에서 템플릿에 설명된 항목을 생성하는 데 사용되는 템플릿도 지정한다.
예를 들어, 다음 템플릿을 사용하여 스택을 생성한 경우 CloudFormation에서는 ami-0ff8a91507f77f867
AMI ID, t2.micro
인스턴스 유형, testkey
키 페어 이름 및 Amazon EBS 볼륨을 사용하여 인스턴스를 프로비저닝한다.
예 JSON
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "A sample template",
"Resources" : {
"MyEC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-0ff8a91507f77f867",
"InstanceType" : "t2.micro",
"KeyName" : "testkey",
"BlockDeviceMappings" : [
{
"DeviceName" : "/dev/sdm",
"Ebs" : {
"VolumeType" : "io1",
"Iops" : 200,
"DeleteOnTermination" : false,
"VolumeSize" : 20
}
}
]
}
}
}
}
예 YAML
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
MyEC2Instance:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-0ff8a91507f77f867"
InstanceType: t2.micro
KeyName: testkey
BlockDeviceMappings:
-
DeviceName: /dev/sdm
Ebs:
VolumeType: io1
Iops: 200
DeleteOnTermination: false
VolumeSize: 20
단일 템플릿에서 여러 리소스를 지정하고 해당 리소스를 함께 작동하도록 구성할 수도 있다. 예를 들어, 다음 예제와 같이 탄력적 IP(EIP)를 포함하도록 이전 템플릿을 수정한 후 Amazon EC2 인스턴스와 연결할 수 있다.
예 JSON
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "A sample template",
"Resources" : {
"MyEC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-0ff8a91507f77f867",
"InstanceType" : "t2.micro",
"KeyName" : "testkey",
"BlockDeviceMappings" : [
{
"DeviceName" : "/dev/sdm",
"Ebs" : {
"VolumeType" : "io1",
"Iops" : 200,
"DeleteOnTermination" : false,
"VolumeSize" : 20
}
}
]
}
},
"MyEIP" : {
"Type" : "AWS::EC2::EIP",
"Properties" : {
"InstanceId" : {"Ref": "MyEC2Instance"}
}
}
}
}
예 YAML
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
MyEC2Instance:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-0ff8a91507f77f867"
InstanceType: t2.micro
KeyName: testkey
BlockDeviceMappings:
-
DeviceName: /dev/sdm
Ebs:
VolumeType: io1
Iops: 200
DeleteOnTermination: false
VolumeSize: 20
MyEIP:
Type: AWS::EC2::EIP
Properties:
InstanceId: !Ref MyEC2Instance
이전 템플릿은 단일 Amazon EC2 인스턴스를 기반으로 하지만 CloudFormation 템플릿은 복잡한 리소스 세트를 구축하는 데 사용 가능한 추가 기능이 있으며 다양한 컨텍스트에서 템플릿을 재사용할 수 있다. 예를 들어 CloudFormation 스택을 생성할 때 값이 지정되는 입력 파라미터를 추가할 수 있다. 다시 말해 템플릿을 생성할 때가 아니라 스택을 생성할 때 인스턴스 유형과 같은 값을 지정할 수 있으므로 다양한 상황에서 템플릿을 더 쉽게 재사용할 수 있다.
템플릿 생성 및 기능에 대한 자세한 내용은 템플릿 구조 단원을 참조한다.
특정 리소스 선언에 대한 자세한 내용은 AWS 리소스 및 속성 유형 참조 단원을 참조한다.
AWS CloudFormation Designer로 자체 템플릿 설계를 시작하려면 https://console.aws.amazon.com/cloudformation/designer로 이동한다.
2. 스택
CloudFormation을 사용할 경우 스택이라는 하나의 단위로 관련 리소스를 관리한다. 스택을 생성, 업데이트, 삭제하여 리소스 모음을 생성, 업데이트 및 삭제한다. 스택의 모든 리소스는 스택의 CloudFormation 템플릿으로 정의한다. Auto Scaling 그룹, Elastic Load Balancing 로드 밸런서 및 Amazon Relational Database Service(Amazon RDS) 데이터베이스 인스턴스를 포함하는 템플릿을 생성했다고 가정한다. 이러한 리소스를 생성하려면 생성한 템플릿을 제출하여 스택을 생성한다. 그러면 CloudFormation에서 모든 리소스를 자동으로 프로비저닝한다. CloudFormation 콘솔, API 또는 AWS CLI를 사용하여 스택 작업을 수행할 수 있다.
스택 생성, 업데이트 또는 삭제에 대한 자세한 내용은 스택 작업 단원을 참조한다.
3. 변경 세트
스택에서 실행 중인 리소스를 변경해야 하는 경우 스택을 업데이트한다. 리소스를 변경하기 전에 제안된 변경 사항이 요약된 변경 세트를 생성할 수 있다. 변경 세트를 사용하면 변경 사항을 구현하기 이전에 해당 변경이 실행 중인 리소스 특히, 중요 리소스에 미치는 영향을 확인할 수 있다.
예를 들어, Amazon RDS 데이터베이스 인스턴스의 이름을 변경한 경우 CloudFormation에서 새 데이터베이스를 생성하고 이전 데이터베이스를 삭제한다. 아직 백업하지 않은 경우 이전 데이터베이스의 데이터를 잃게 된다. 변경 세트를 생성한 경우 변경 후 데이터베이스가 교체된다는 사실을 알 수 있으므로 스택을 업데이트하기 이전에 적절히 계획할 수 있다. 자세한 내용은 변경 세트를 사용하여 스택 업데이트 섹션을 참조한다.