CloudFormation 템플릿에는 여러 장점이 있습니다.
- 친숙한 형식: CloudFormation 템플릿은 애플리케이션 또는 서비스를 이들 간의 상호 연결과 함께 실행하는 데 필요한 AWS 인프라를 설명하는 JSON(Javascript Object Notation) 또는 YAML 형식의 텍스트 파일입니다.
- 관계 관리: 템플릿은 리소스 관계(예: Elastic Load Balancing 로드 밸런서와 연결되어야 하는 EC2 인스턴스 또는 EBS 볼륨은 연결된 인스턴스와 동일한 EC2 가용 영역 내에 있어야 한다는 사실)를 명확하게 캡처합니다.
- 반복 사용 가능: 템플릿 파라미터를 통해 단일 템플릿을 다른 구성 값(예: 애플리케이션을 위해 배포할 인스턴스 수)을 가진 여러 인프라 배포에 사용할 수 있습니다.
- 유용한 피드백: 템플릿은 배포 결과 또는 구성 정보를 다시 사용자에게 전달하기 위한 출력 속성도 제공합니다. 예를 들어, 인스턴스화되었을 때 템플릿은 고객이 새로 인스턴스화된 애플리케이션에 연결하는 데 사용해야 하는 Elastic Load Balancing 엔드포인트의 URL을 제공할 수 있습니다.
- 충돌 방지: 템플릿에 있는 모든 AWS 리소스는 논리적 이름을 사용하여 식별되므로 AWS 리소스 간에 이름이 충돌할 걱정 없이 템플릿에서 여러 스택을 생성할 수 있습니다.
- 작성 후 바로 실행: 사전에 AWS CloudFormation에 템플릿을 등록하지 않아도 원하는 방법으로 스택을 시작할 수 있습니다.
- 스택 시각화: CloudFormation Designer를 사용하면 템플릿을 다이어그램으로 시각화할 수 있습니다. AWS 리소스와 리소스 간의 관계를 쉽게 확인하고, 원하는 형태로 다이어그램의 레이아웃을 변경할 수 있습니다. 끌어서 놓기 인터페이스 및 통합된 JSON 편집기를 사용해 템플릿을 편집할 수 있습니다. 다이어그램에 적용한 수정 사항은 자동으로 템플릿의 JSON에 적용됩니다.
- 리소스 조회: AWS CloudFormation에서는 스택 템플릿 사본을 보존하므로, AWS Management Console, 명령줄 도구 또는 API를 사용하여 스택 생성 시 적용된 정확한 리소스 구성을 조회할 수 있습니다.
- 자동화: 프로그래밍 언어 또는 원하는 도구를 사용하여 템플릿 생성을 자동화할 수 있는 옵션이 있습니다. 또한, CloudFormation API, AWS SDK, AWS CLI를 사용하여 템플릿에서 스택 생성을 자동화할 수도 있습니다.
템플릿은 다음과 같은 높은 수준의 JSON 구조를 가집니다.
무료로 AWS 시작하기
무료 계정 생성또는 콘솔에 로그인
12개월 동안 AWS 프리 티어에 액세스하고 연중무휴 24시간 고객 서비스, 지원 포럼 등을 비롯한 AWS Basic Support의 기능을 사용할 수 있습니다.
{
"Description" : "A text description for the template usage",
"Parameters": {
// A set of inputs used to customize the template per deployment
},
"Resources" : {
// The set of AWS resources and relationships between them
},
"Outputs" : {
// A set of values to be made visible to the stack creator
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
다음 템플릿은 EC2 인스턴스 생성 방법을 보여주는 간단한 예입니다.
{
"Description" : "Create an EC2 instance running the Amazon Linux 32 bit AMI.",
"Parameters" : {
"KeyPair" : {
"Description" : "The EC2 Key Pair to allow SSH access to the instance",
"Type" : "String"
}
},
"Resources" : {
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"KeyName" : { "Ref" : "KeyPair" },
"ImageId" : "ami-3b355a52"
}
}
},
"Outputs" : {
"InstanceId" : {
"Description" : "The InstanceId of the newly created EC2 instance",
"Value" : {
"Ref" : "Ec2Instance"
}
}
},
"AWSTemplateFormatVersion" : "2010-09-09"
}
스택이란 템플릿 인스턴스화로 발생한 리소스 모음입니다. AWS CloudFormation에 템플릿과 필요한 모든 파라미터를 제공하여 스택을 생성할 수 있습니다. 템플릿 및 템플릿 내 지정된 모든 종속성을 기반으로 AWS CloudFormation은 어떤 AWS 리소스가 어떤 순서대로 생성될 것인지 결정합니다.
스택을 업데이트하려면 스택 내 모든 리소스에 대해 원하는 구성이 포함된 템플릿을 제공해야 합니다. 환경의 변경 사항이나 새로운 애플리케이션 요구 사항에 대응하기 위해 스택에 있는 기존 리소스의 속성을 수정할 수 있습니다. 예를 들어, AWS CloudWatch 경보에 대한 경보 임계값을 변경하거나 스택의 인스턴스에서 실행되고 있는 AMI를 업데이트할 수 있습니다. AWS CloudFormation은 스택의 다양한 리소스를 통해 이러한 변경 사항이 적용될 수 있도록 합니다. 대부분의 경우 변경 사항은 적용될 때 실행 중인 애플리케이션에 영향을 미치지 않습니다. 그러나 변경 사항이 동적으로 적용될 수 없는 경우(예: EC2 인스턴스에서 AMI 업데이트) AWS CloudFormation은 새로운 리소스를 생성하여 스택 내 리소스를 덮어쓰게 됩니다. 서비스에서 전체 업데이트가 성공적으로 이루어졌음을 확인하면, 이전 리소스는 삭제됩니다.
AWS CloudFormation은 스택 전체를 생성하거나 업데이트합니다. 스택 전체가 생성되거나 업데이트될 수 없는 경우 AWS CloudFormation은 해당 스택을 롤백합니다. 디버깅이 목적인 경우 롤백 작업은 비활성화되며, 나중에 스택 생성 또는 업데이트를 수동으로 다시 시도할 수 있습니다.
또한, AWS CloudFormation Designer를 사용하여 스택의 템플릿을 생성 또는 수정한 후 이를 AWS CloudFormation에 제출하여 해당 스택을 생성 또는 업데이트할 수 있습니다. AWS CloudFormation Designer는 AWS Management Console에서 사용할 수 있습니다.
스택을 배포 및 관리하는 포인트 앤 클릭 방식의 웹 기반 인터페이스인 AWS Management Console을 통해 AWS CloudFormation에 손쉽게 액세스할 수 있습니다. AWS Management Console에서 몇 가지 간단한 단계를 거쳐 애플리케이션을 생성, 삭제 및 업데이트할 수 있습니다.
AWS CloudFormation Designer는 시각적 도구로서, 템플릿에 리소스를 추가할 수 있는 끌어서 놓기 인터페이스를 제공합니다. CloudFormation Designer를 사용하면 수동으로 템플릿을 코딩하는 데 시간을 소비하는 대신 AWS 인프라 설계에 더 많은 시간을 투자할 수 있습니다. 예를 들어 사용자가 리소스를 추가하거나 제거할 때, CloudFormation Designer에서 해당 JSON을 자동으로 수정합니다. 또한, 통합된 텍스트 편집기를 사용하여 리소스 속성값, 입력 파라미터 등 템플릿 세부 정보를 지정할 수 있습니다. 자세한 내용은 설명서를 참조하십시오.
AWS CloudFormation Designer는 AWS CloudFormation 콘솔의 일부로서, 도구를 사용하려면 AWS 자격 증명으로 로그인해야 합니다. AWS CloudFormation Designer를 사용하려면, https://console.aws.amazon.com/cloudformation/designer로 이동하십시오. 다음 시나리오는 AWS CloudFormation Designer의 일부 기능을 보여줍니다.
템플릿 리소스 시각화
JSON 형식의 텍스트 파일을 파싱하여 템플릿에 어떤 리소스가 있는지와 리소스 간의 관계를 파악하기는 어려울 수 있습니다. AWS CloudFormation Designer에서는 작동하는 어떤 AWS CloudFormation 템플릿이든 열 수 있으며, 이 도구에서 모든 템플릿 리소스를 다이어그램으로 시각화해줍니다. JSON을 읽지 않고도 템플릿 리소스뿐 아니라 리소스가 서로 어떻게 연결되었는지 간편하게 볼 수 있습니다. AWS CloudFormation Designer에는 JSON 텍스트 편집기가 포함되어 있어 필요할 때 언제든 템플릿 세부 정보를 볼 수 있습니다.
간편한 템플릿 작성
텍스트 편집기에서 템플릿 리소스 작업을 하려면, 수동으로 JSON을 편집해야 하므로 작업이 지루하고 오류가 발생하기 쉽습니다. AWS CloudFormation Designer에서는 다이어그램으로 작업하는 것과 유사한 방식으로 리소스 작업을 할 수 있습니다. 새로운 리소스를 끌어서 놓는 방식으로 템플릿에 추가하고 리소스 간의 연결을 끌어와서 관계를 설정할 수 있습니다. AWS CloudFormation Designer에서는 JSON을 자동으로 수정합니다. 리소스를 시각화하는 것 외에도 통합된 JSON 텍스트 편집기에서 리소스 속성 이름에 대한 자동 완료 기능을 제공합니다. AWS CloudFormation Designer를 사용하면 수동으로 템플릿을 코딩하는 데 시간을 소비하는 대신 AWS 인프라 설계에 더 많은 시간을 투자할 수 있습니다.
또한 AWS CloudFormation은 사용이 간편하며 유연성이 높은 간단한 API 세트를 제공합니다. 사용 가능한 전체 AWS CloudFormation API 목록은 AWS CloudFormation API Reference Guide를 참조하십시오. 가장 일반적으로 사용되는 API와 해당 기능이 아래에 나열되어 있습니다.
- CreateStack: 새 스택 생성을 시작합니다. 호출에 대한 입력 파라미터에는 원본 템플릿의 스택 이름 및 파일 이름(또는 Amazon S3 URL)이 포함됩니다. 스택 생성 프로세스가 성공적으로 완료되면 스택은 CREATE_COMPLETE 상태가 됩니다. 스택 생성이 실패하면, 사용자가 디버깅 목적으로 이러한 요소를 유지하도록 플래그를 지정하지 않은 한, AWS CloudFormation은 이전에 생성된 리소스를 삭제합니다.
- ListStacks: 계정에 있는 모든 스택을 나열합니다. 이 API를 사용하여 스택 세트와 해당 스택이 생성되었는지 또는 업데이트되었는지와 같은 현재 상태를 확인할 수 있습니다.
- ListStackResources: 스택 생성의 일부로 생성된 모든 AWS 리소스 이름 및 식별자를 나열합니다. 이뿐만 아니라, AWS CloudFormation 인지 애플리케이션에서 이러한 호출을 사용하여 해당 환경을 파악하는 등의 정보도 얻을 수 있습니다.
- DescribeStackEvents: 생성 또는 삭제의 진행 상태를 볼 수 있도록 스택에 대해 AWS CloudFormation이 생성한 모든 작업 및 이벤트를 나열합니다.
- UpdateStack: 기존 스택에 대한 업데이트 프로세스를 시작합니다. 호출에 대한 입력 파라미터에는 업데이트된 템플릿의 스택 이름 및 파일 이름(또는 Amazon S3 URL)이 포함됩니다. 스택 업데이트 프로세스가 성공적으로 완료되면 스택은 UPDATE_COMPLETE 상태가 됩니다. 스택 업데이트가 실패하면, AWS CloudFormation은 스택이 원래 템플릿에 설명된 상태로 돌아가도록 수행된 모든 리소스 변경 사항을 롤백합니다.
AWS CloudFormation은 AWS SDK 및 AWS CLI를 통해서도 사용할 수 있습니다.
AWS CloudFormation은 Amazon Simple Notification Service(SNS)와 통합되어 있으므로 스택의 생성, 업데이트 및 삭제가 진행됨에 따라 알림을 받을 수 있습니다. 상태를 제공하는 것 외에 이 API는 다른 프로그램이 CloudFormation 내의 이벤트를 인식하여 이에 대해 응답하거나 스택 구성 프로세스에 참여할 수 있도록 허용합니다.
AWS를 사용한 적이 있으면 AWS CloudFormation 템플릿을 사용하기 쉽습니다. 각 리소스에는 기본 API를 통해 리소스를 생성하는 데 사용되는 이름과 동일한 이름 및 파라미터 세트가 포함되어 있습니다. 다음 템플릿 조각은 Amazon EBS 볼륨을 정의하는 방법을 보여 줍니다. 템플릿에 있는 볼륨의 논리적 이름은 "myVolume"이며, 유형은 "AWS::EC2::Volume"입니다. 이전에 EBS 볼륨을 사용해 본 경험이 있다면 속성이 매우 익숙해 보일 것입니다.
"myVolume" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Size" : "10",
"SnapshotId" : "snap-7b8fd361",
"AvailabilityZone" : "us-east-1a"
}
}
AWS CloudFormation은 EC2 인스턴스에 배포할 수 있는 여러 헬퍼 스크립트를 제공합니다. 이러한 스크립트는 스택에서 리소스 메타데이터를 읽고, 이를 사용하여 애플리케이션을 구성하고, 템플릿에 나열된 인스턴스에 패키지 및 파일을 배포하고, 애플리케이션의 구성 또는 업데이트에 대한 변경 사항과 같은 스택 업데이트에 대응할 수 있는 간단한 방법을 제공합니다.
다음과 같은 스크립트를 사용할 수 있습니다.
- cfn-get-metadata: 템플릿의 리소스에 연결된 메타데이터를 검색합니다.
- cfn-init: 템플릿에 설명된 패키지 및 파일을 다운로드하고 설치합니다.
- cfn-signal: 애플리케이션이 실행되고 있으며 트래픽을 받아들일 준비가 되었다는 신호를 스택 생성 워크플로에 보냅니다.
- cfn-hup: 직접 AWS 콘솔, 명령줄 도구 또는 API를 통해 시작된 스택 업데이트를 수신 대기하는 데몬으로서, 애플리케이션별 후크를 실행하여 해당 변경 사항에 대응합니다.
CloudFormation 스크립트를 단독으로 사용하거나, Amazon Linux AMI 및 이외 일부 Linux AMI에서 사용할 수 있는 기능인 CloudInit과 함께 사용할 수 있습니다. 애플리케이션 부트스트래핑 및 구성 업데이트에 대한 자세한 내용은 AWS CloudFormation 개발자 리소스를 참조하십시오.
이 서비스의 사용은 Amazon Web Services 고객 계약에 따릅니다.