강좌
클라우드/리눅스에 관한 강좌입니다.
클라우드 분류

[KT클라우드]Infra Formation 템플릿 제작

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

Infra Formation 템플릿 소개
개요
템플릿 Infra Formation에서 스택을 배포 할 때 어떻게 만들것인가를 기술한 하나의 문서입니다.
사전에 어떻게 만들것인지에 대해 프로그래밍 하듯이 미리 JSON 문서로 만들어두고, 스택 생성이 필요할 때마다 사용하여 배포에 사용됩니다.
템플릿 언어 포맷
KT Cloud Packaging 템플릿는 JSON 텍스트 파일입니다. 포맷은 JSON 표준을 따릅니다.
본 매뉴얼에서는 JSON에 대한 설명을 따로 수록하지는 않습니다.
JSON에 대한 자세한 내용은 http://www.json.org 를 참고하시기 바랍니다.
Infra Formation 템플릿 구성
[TIP] 템플릿를 처음부터 작성하는 것은 어려운 일입니다.
미리 작성되어 제공되는 '공유용 템플릿'를 복사하여, 필요에 따라 수정하여 사용하는 것이 더욱 수월합니다.
템플릿는 크게 아래 다섯 파트로 구성됩니다.
Version (옵션)
템플릿이 작성된 버전을 의미합니다. 작성된 날짜 형태로 입력됩니다.
Description (옵션)
템플릿 설명을 입력합니다. 레시피 본문(Body)에서 보는 용도이며, UI에서 보이는 템플릿 설명과는 별도입니다.
길이 제한은 4000자 이내입니다.
Parameters (옵션)
템플릿 작성 과정에서 지정하지 않고, 이 템플릿으로 스택을 배포할 때 입력 받을 값(파라미터)를 정합니다.
예를 들어 동일한 템플릿으로 다른 Zone에 여러 번 배포하고 싶으면 Zone ID를 파라미터로 기술해 두면, 배포할 때마다 Zone을 다르게 해서 배포가 가능합니다.
파라미터로 지정된 값은 Resources나 Outputs에서 참조하여 사용할 수 있습니다.
형식은 아래를 따릅니다.
"Parameters": {
   "MyParam1" : {
       "Type" : "xxxx",
       "Default" : "yyyy",
       (기타 다른 내용들)
   },
   "Another" : {
       "Type" : "zzzz",
       (기타 다른 내용들)
   }
}
각 파라미터 안에 들어갈 수 있는 내용들은 아래와 같습니다.
항목필수여부설명
TypeYesBoolean, String, Number, CommaDelimitedList 중 한 가지 타입을 부여합니다. String 타입은 문자열을 의미합니다. Number 타입은 정수나 소수점 숫자를 표현합니다. Number 타입에 대한 값은 integer 나 float 일 수 있지만, Number 의 값은 String 타입과 같이 ""로 묶여야 합니다. CommaDelimitedList 타입은 쉼표(,)로 분리된 String 타입의 배열입니다. 배열에 포함되는 String 의 값에는 공백이나 쉼표가 들어가서는 안된다.
DefaultNopackage 생성 시 사용자가 parameter 값을 지정하지 않을 경우 사용되는 기본 값입니다. 만약 Default 항목이 없는 Parameter 에 대해 생성 시 값이 전달되지 않으면 패키지 생성이 실패합니다. Default에 기입되는 값 역시 parameter 값의 제약(아래)을 지켜야 합니다.
NoEchoNo만약 "TRUE"일 경우에 별표(***)로 값이 치환되어 표시됩니다.
AllowedValuesNoparameter 값으로 허락된 값들의 배열입니다.
AllowedPatternNoString 타입에 대한 제약사항입니다. parameter 의 string 타입 값에 허용되는 패턴을 정규 표현식으로 표현합니다.
MaxLengthNoString 타입에 대한 제약사항입니다. parameter 의 string 타입 값의 최대 길이를 정합니다.
MinLengthNoString 타입에 대한 제약사항입니다. parameter의 string 타입 값의 최소 길이를 정합니다.
MaxValueNoNumber 타입에 대한 제약사항입니다. parameter 의 number 타입 값의 최대 값을 정합니다.
MinValueNoNumber 타입에 대한 제약사항입니다. parameter 의 number 타입 값의 최소 값을 정합니다.
DescriptionNoparameter 에 대한 4000 자 이내의 설명입니다.
Resources (필수)
스택에 배포할 자원들을 정의합니다.
자원은 일반적으로 생각할 수 있는 VM, Disk, WAF, DB, NAS 뿐 아니라 네트워크 연결 작업이나 서버 추가 작업 등 작업 자체도 자원으로 포함됩니다.
예를 들면, 포트포워딩 작업, 로드밸런서에 서버 추가, 오토스케일링 그룹 설정 등이 포함됩니다.
Resources 항목은 크게 Type, Properties, DependsOn 으로 구분 됩니다.
- Type : 자원의 유형을 의미합니다. VM은 VirtualMachine 이라는 타입이고, 포트포워딩 룰은 PortForwardingRule이라는 타입입니다.
- Properties : 각 타입의 자원을 만들기 위해 필요한 속성을 입력합니다. 예를 들면, VM 타입의 자원은 사양, OS, Zone, userdata 등의 속성들을 가집니다.
- DependsOn : 자원의 배포 순서를 지정하기 위해 사용하는 항목입니다.
대표적인 Resources 중 하나인 VM의 정의 예시 입니다.
"Resources" : {
   "MyVM" : {
       "Type" : "UPAC::VirtualMachine",
       "Properties" : {
           "ProductCode": "std_cent 7.0 64bit en_1x1_roortonly",
           "DisplayName": "MyServer",
           "ZoneId": "qqqq-wwwwwwww-rrrrrrrr"
       }
   }
}
Type으로 VirtualMachine을 지정하고 있고, 그에따라 필요한 Properties인 서비스오퍼링, VM 이름, VM 이미지, Zone 등을 정하고 있습니다.
Resources의 종류별 Type과 그에 따른 Properties는 내용이 많아 별도 페이지에서 설명합니다. 여기를 참고하세요.
Outputs (옵션)
이 템플릿를 사용하여 스택 배포가 끝난 후, 사용자에게 반환해 줄 결과값을 지정합니다.
예를 들어, VM을 배포한 후 그 VM의 비밀번호를 전달할 수 있습니다.
템플릿 내장 함수
Ref
특정 파라미터나 자원의 어떤 값을 참조할 때 사용합니다.
ㅇ 사용 방법
"Ref" : "논리적 이름"
논리적 이름에는 파라미터명 혹은 자원의 논리적 이름을 사용할 수 있습니다.
파라미터명을 명시하면, 스택을 배포할 시점에 배포자가 해당 파라미터로 입력한 값을 그대로 사용합니다.
자원의 논리적 이름을 사용할 경우, 해당 자원에 정해진 값을 반환합니다.
정해진 값은 아래와 같습니다.
자원 유형반환되는 항목
VirtualMachineid
Volumeid
VolumeAttachment(반환값 없음)
FirewallRuleid
IpAddressid
PortForwardingRuleid
LoadBalancerRuleid
LoadBalancerAssignmentid
LoadBalancerId(loadbalancerid)
LoadBalancerWebServerAdditionid(serviceid)
WAFid
WAFWebServerAdditionid(webserverid)
WAFWebSiteAdditionid(websiteresourceid
DBid(instanceid)
DBParameterGroupid(parameter groupid)
DBAccessControlGroupid(accesscontrol groupid)
DBReplicationGroupid(replication groupid)
DBReplicationGroupMultiZoneid(replication groupid)
DBHaGroupSingleZoneid(ha groupid)
AutoScalingGroup(반환값 없음)
LaunchConfiguration(반환값 없음)
ScalingPolicyId(scalingpolicyurn)
TopicId(topicurn)
Alarm(반환값 없음)
WAIT_OBJECTUserSignal
WAIT_OBJECT_HANDLEid
ㅇ 사용 예시 1 (파라미터 반환)
"Parameters": {
   "zone1": {
       "Type": "String"
   }
},
"Resources: {
   "MyVM": {
       "Type": "UPAC::VirtualMachine",
       "Properties": {
         "ZoneID: {
               "Ref": "zone1"
          }
     }
   }
}
Parameters에서 zone1이라는 파라미터를 입력받아서, 실제로 Resources 내 MyVM이라는 VirtualMachine을 만들 때 ZoneID로 사용합니다.
ㅇ 사용 예시 2 (자원 반환)
"Resources": {
   "MyVM": {
       "Type": "UPAC::VirtualMachine"
     },
   "MyIP": {
       "Type": "UPAC::IpAddress"
     },
   "DoPortForwarding": {
       "Type": "UPAC::PortForwardingRule",
       "Properties": {
           "VirtualMachineId":{
               "Ref": "MyVM"
           },
       "IpAddressId": {
             "Ref": "MyIP"
         },
         "PubilcPor": "22",
         "PrivatePort": "22",
         "Protocol": "TCP"
        }
   }
}
GetAtt
입력 문자를 Base64로 인코딩 합니다. VM 생성할 때 userdata 전송할 때 주로 사용됩니다.
ㅇ 사용 방법
"GetAtt": [
   "자원 이름",
   "속성 이름"
]
자원 별 속성은 아래와 같습니다.
자원 유형속성 이름
VirtualMachineIpAddress, password
Volume
VolumeAttachment
FirewallRule
IpAddressIpAddress
PortForwardingRule
LoadBalancerRule
LoadBalancerAssignment
LoadBalancerLoadBalancerId, ServiceIp
LoadBalancerWebServerAddition
WAFServiceIp
WAFWebServerAddition
WAFWebSiteAddition
DBPort, Ip, PrivatPort, PrivateIp
DBParameterGroup
DBAccessControlGroup
DBReplicationGroup
DBReplicationGroupMultiZone
DBHaGrouphavip
AutoScalingGroup
LaunchConfiguration
ScalingPolicy
Topic
Alarm
WaitObject
WaitObjecthandle
ㅇ 사용 예시
"Outputs": {
   "MyPassword": {
       "Value": {
           "GetAtt": [
               "MyVM",
               "password"
             ]
       },
       "Description": "VM 비밀번호"
     }
}
Base64
입력 문자를 Base64로 인코딩 합니다. VM 생성할 때 userdata 전송할 때 주로 사용됩니다.
ㅇ 사용 방법
"Base64" : {인코딩할문자열}
ㅇ 사용 예시
"MyVM": {
   "Type": "UPAC::VirtualMachine",
   "Properties": {
     "UserData": {
          "Base64": {
               "yum install -y httpd"
           }
       }
   }
}
Join
원하는 값들을 구분자로 연결된 하나의 문자열로 만들 때 사용합니다. 구분자가 빈 문자열인 경우, 모든 값들이 구분자 없이 연결 됩니다.
ㅇ 사용 방법
"Join": [
   "구분자", [
       쉼표(,)로 구분된 값들의 목록
   ]
]
ㅇ 사용 예시 1
"Join": [
   ":", [
       "a",
       "b",
       "c"
   ]
]
이 함수의 실행 결과는 "a:b:c" 가 된다.
ㅇ 사용 예시 2 (VM 생성 시 user data로 여러 줄 전달)
"UserData": {
   "Base64": {
       "Join": [
           "", [
               "yum install -y httpd\n",
               "systemctl start httpd\n",
                "systemctl enable httpd\n"
           ]
       ]
   }
}
세 줄의 커맨드라인이 하나의 명령어가 되어 Base64 인코딩 후 user data로 전달 됩니다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,034 명
  • 현재 강좌수 :  35,785 개
  • 현재 접속자 :  234 명