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 값이 존재할 시 그 값들만을 선택가능합니다.

 

  • 생성이 완료되었습니다.
  • 이와 같이 파라미터 값을 사용하면 보다 편리하게 서비스들의 구현이 가능합니다.

 

RSS Feed
마지막 수정일자