AWS CloudFormation 개념 - AWS CloudFormation

AWS CloudFormation 개념

AWS CloudFormation을 사용하는 경우에는 템플릿스택으로 작업합니다. 템플릿을 생성하여 AWS 리소스와 해당 속성에 대해 설명합니다. 스택을 생성할 때마다 CloudFormation에서 템플릿에 설명된 리소스를 프로비저닝합니다.

템플릿

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로 이동합니다.

스택

CloudFormation을 사용할 경우 스택이라는 하나의 단위로 관련 리소스를 관리합니다. 스택을 생성, 업데이트, 삭제하여 리소스 모음을 생성, 업데이트 및 삭제합니다. 스택의 모든 리소스는 스택의 CloudFormation 템플릿으로 정의합니다. Auto Scaling 그룹, Elastic Load Balancing 로드 밸런서 및 Amazon Relational Database Service(Amazon RDS) 데이터베이스 인스턴스를 포함하는 템플릿을 생성했다고 가정합니다. 이러한 리소스를 생성하려면 생성한 템플릿을 제출하여 스택을 생성합니다. 그러면 CloudFormation에서 모든 리소스를 자동으로 프로비저닝합니다. CloudFormation 콘솔, API 또는 AWS CLI를 사용하여 스택으로 작업할 수 있습니다.

스택 생성, 업데이트 또는 삭제에 대한 자세한 내용은 스택 작업 단원을 참조하십시오.

변경 세트

스택에서 실행 중인 리소스를 변경해야 하는 경우 스택을 업데이트합니다. 리소스를 변경하기 전에 제안된 변경 사항이 요약된 변경 세트를 생성할 수 있습니다. 변경 세트를 사용하면 변경 사항을 구현하기 이전에 해당 변경이 실행 중인 리소스 특히, 중요 리소스에 미치는 영향을 확인할 수 있습니다.

예를 들어, Amazon RDS 데이터베이스 인스턴스의 이름을 변경한 경우 CloudFormation에서 새 데이터베이스를 생성하고 이전 데이터베이스를 삭제합니다. 아직 백업하지 않은 경우 이전 데이터베이스의 데이터를 잃게 됩니다. 변경 세트를 생성한 경우 변경 후 데이터베이스가 교체된다는 사실을 알 수 있으므로 스택을 업데이트하기 이전에 적절히 계획할 수 있습니다. 자세한 내용은 변경 세트를 사용하여 스택 업데이트 섹션을 참조하세요.