AWS CloudFormation
AWS CloudFormation
- 이번 장에서는 CloudFormation의 탬플릿을 사용하여 서버를 자동 구축되도록 생성해보도록 하겠습니다.
- CloudFormation의 대한 개념은 CloudFormation을 참고하세요.
CloudFormation을 활용한 자동구축
CloudFormation 아키텍처 예시
- 먼저, AWS에서 CloudFormation 검색 후 클릭합니다.
- 스택 생성을 클릭합니다.
- 스택 생성을 위해 아래의 값을 cloudformation_instance.template 을 생성하여 업로드 합니다.
- 보통 Templates 파일은 S3에 저장된 것을 사용하지만, 여기서는 로컬환경에서 가져와 사용해보도록 하겠습니다.
- CloudFormation Templates 참조
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Resources": {
"Instance": {
"Type": "AWS::EC2::Instance",
"Properties":{
"Monitoring": "false",
"ImageId": "[ AMI ID ]",
"KeyName": "[ Key ]",
"InstanceType": "t2.micro",
"NetworkInterfaces": [ {
"DeviceIndex": "0",
"AssociatePublicIpAddress": "true",
"DeleteOnTermination": "true",
"SubnetId": "[ 서브넷 ID ]",
"GroupSet": ["[ 보안 그룹 ]"]
}
]
}
}
},
"Description": "SampleInstance"
}
- CloudFormation 기본형식
{
"AWSTemplateFormatVersion" : "version date",
"Description" : "JSON string",
"Parameters": {
set of parameters
},
"Mappings": {
set of mappings
},
"Conditions": {
set of conditions
},
"Resources": {
set of resources
},
"Outputs": {
set of outpus
}
}
옵션 설명 AWSTemplateFormatVersion 템플릿의 버전 Description 템플릿의 대한 설명 ( 시스템이 읽지 않음 ) Parameters 스택 생성 때에 전달할 값, 탬플릿 내부에서 Ref 함수로 참조 Mappings 해시 테이블처럼 키에 따라 값을 지정할 수 있으며, 리전마다 사용할 AMI를 다르게 하는 경우 등의 사용 Conditions 조건을 판단, 조건에 일치하는 경우 실행할 리소스를 지정할 수 있음 Resources 생성할 자원을 정의, EC2 인스턴스, 보안 그룹 등의 생성할 자원 유형을 지정하고 설정 ( 아직 모든 서비스를 이용할 수는 없음 ) Outputs 탬플릿으로 생성한 결과를 출력
- 업로드가 완료되면, 스택의 이름을 지정합니다.
- 스택 옵션 구성에서는 IAM 역할, 그 외에도 스택의 정책과 옵션들을 구성할 수 있습니다.
- 여기에서는 기본 값으로 진행하겠습니다.
- 스택의 생성이 완료되면, 그림과 같이 상태에서 로그를 확인하실 수 있습니다.
- 생성이 완료되면 인스턴스가 생성된 것을 확인 할 수 있습니다.
CloudFormation 업데이트
- 이번에는 생성된 Stack을 업데이트 하는 방법에 대해 알아보도록 하겠습니다.
- 먼저, 위에서 생성한 Stack > 업데이트를 클릭합니다.
- 스택 업데이트를 클릭하면 현재 템플릿을 사용하면서 스택의 옵션만 바꿀건지, 혹은 탬플릿 자체를 변경할 것인지에 대한 옵션이 나옵니다.
- 저희는 탬플릿 자체에 대한 옵션을 바꾸기 위해 기존 templates 파일을 아래와 같이 수정하여 업데이트 하도록 하겠습니다.
- Designer 편집기에서 추가하셔도 상관은 없습니다.
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Resources": {
"Instance": {
"Type": "AWS::EC2::Instance",
"Properties":{
"Monitoring": "false",
"ImageId": "ami-01af223aa7f274198",
"KeyName": "Study",
"InstanceType": "t2.micro",
"NetworkInterfaces": [ {
"DeviceIndex": "0",
"AssociatePublicIpAddress": "true",
"DeleteOnTermination": "true",
"SubnetId": "subnet-463b3d0a",
"GroupSet": ["sg-f553af91"]
}
],
"UserData": { "Fn::Base64" :
{ "Fn::Join" : ["", [
"#!/bin/bash\n",
"yum update -y\n",
"yum install -y httpd\n",
"service httpd start\n",
"chkconfig httpd on\n" ]]
}
}
}
}
},
"Description": "SampleInstance"
}
- 탬플릿 업로드 후, 위와 동일하게 생성하면 보기와 같이 업데이트를 확인하실 수 있습니다.
- 생성된 인스턴스로 접속하면, Apache가 설치되어 있는 것을 확인하실 수 있습니다.
CloudForamtion 파라미터 설정
- 위에서는 고정 값으로 스택을 생성했지만, 만약 고정 값으로 생성을 진행할 경우, 에러가 발생할 수 있으며, 여러 탬플릿을 생성해야하는 번거로움이 존재합니다.
- 이번에는 파라미터 값을 설정하여 CloudFormation을 사용하는 방법에 대해 알아보도록 하겠습니다.
- 먼저 위에서 생성한 템플릿을 Parameter 값을 사용하도록 수정하여 보겠습니다.
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Parameters": {
"ImageId" : {
"Type": "String",
"Default": "ami-01af223aa7f274198",
"Description": "IamgeId"
},
"KeyName" : {
"Type": "String",
"Default": "Study",
"Description": "Keypair name"
},
"InstanceType" : {
"Type": "String",
"Default": "t2.micro",
"Description": "InstanceType"
},
"AssociatePublicIpAddress" : {
"Type": "String",
"Default": "true",
"Description": "PublicIP",
"AllowedValues": ["true", "false"]
},
"DeleteOnTermination" : {
"Type": "String",
"Default": "true",
"Description": "DeleteOnTermination",
"AllowedValues": ["true", "false"]
},
"SubnetId" : {
"Type": "String",
"Default": "subnet-463b3d0a",
"Description": "SubnetId"
},
"GroupSet" : {
"Type": "String",
"Default": "sg-f553af91",
"Description": "GroupSet"
}
},
"Resources": {
"Instance": {
"Type": "AWS::EC2::Instance",
"Properties":{
"Monitoring": "false",
"ImageId": { "Ref" : "ImageId" },
"KeyName": { "Ref" : "KeyName" },
"InstanceType": { "Ref" : "InstanceType" },
"NetworkInterfaces": [ {
"DeviceIndex": "0",
"AssociatePublicIpAddress": { "Ref" : "AssociatePublicIpAddress" },
"DeleteOnTermination": { "Ref" : "DeleteOnTermination" },
"SubnetId": { "Ref" : "SubnetId" },
"GroupSet": [{ "Ref" : "GroupSet" }],
}
],
"UserData": { "Fn::Base64" :
{ "Fn::Join" : ["", [
"#!/bin/bash\n",
"yum update -y\n",
"yum install -y httpd\n",
"service httpd start\n",
"chkconfig httpd on\n" ]]
}
}
}
}
},
"Description": "SampleInstance"
}
- 특정 리소스 값들은 파라미터 값에서 가져오는 방식으로 수정하였습니다.
- 위와 같이 설정을 마친 후, 동일하게 스택의 생성을 진행해봅니다.
- 템플릿을 업로드 후 동일하게 진행합니다.
- 하지만 전과는 다르게 수정한 파라미터 값들을 선택하거나 기입하는 선택란이 추가되었습니다.
- 기본적으로 Default 값들을 출력하며, AllowedValues 값이 존재할 시 그 값들만을 선택가능합니다.
- 생성이 완료되었습니다.
- 이와 같이 파라미터 값을 사용하면 보다 편리하게 서비스들의 구현이 가능합니다.
마지막 수정일자