AnyCall API Extension Guide - cloud-barista/cb-spider GitHub Wiki
[AnyCall API Extension Overview]
- ๋ฉํฐํด๋ผ์ฐ๋ ๊ณตํต ์ ์ด๋ฅผ ์ ๊ณตํ๋ CB-Spider API๋ ํน์ Cloud์ ์ธ๋ฐํ ์ ์ด๊ฐ ๋ถ์ถฉ๋ถํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- AnyCall API ํ์ฅ(
AnyCall API Extension
) ๊ธฐ๋ฅ์ ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํ์ฌ- ํน์ CSP์ ํนํ๋ API๋ฅผ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- AnyCall ๊ธฐ๋ฅ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด
(1)AnyCall MSG
,(2)AnyCall API
,(3)AnyCallHandler
๋ฐ ์ถ๊ฐ๋๋(4)Ext-Function
๋ค๋ก ๊ตฌ์ฑ๋๋ค.
- CB-Spider๋ API ํ์ฅ ๊ธฐ๋ฅ ์ ๊ณต์ ์ํ์ฌ
- ๋ฒ์ฉ์ผ๋ก ํธ์ถ ๊ฐ๋ฅํ
(2)AncyCall API
์(3)AnyCallHandler
๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ฉฐ,
- ๋ฒ์ฉ์ผ๋ก ํธ์ถ ๊ฐ๋ฅํ
- ๊ฐ๋ฐ์๊ธ ์ฌ์ฉ์๋ ์ถ๊ฐํ๊ณ ์ ํ๋ API(ํจ์)์
(1)AnyCall MSG
์ ์์(4)Ext-Function
์ ์ถ๊ฐ ๊ฐ๋ฐ๋ก API ํ์ฅ์ด ๊ฐ๋ฅํ๋ค.
- ๊ฐ ์ปดํฌ๋ํธ๋ณ ์ธ๋ถ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
- (1) AnyCall MSG
- ์ถ๊ฐํ๊ณ ์ ํ๋ API(ํจ์)์ ํจ์ ์ด๋ฆ, ์ธ์ ๋ฐ ๋ฐํ ๊ฐ ๋ฑ์ ์ ์ํ๋ ๋ฉ์์ง์ด๋ฉฐ,
(2)AnyCall API
๋ก ์ ๋ฌํ๋ Input MSG์ ์คํ ๊ฒฐ๊ณผ๋ก ๋ฐํ ๋ฐ๋ Output MSG๋ก ๊ตฌ๋ถ๋๋ค.- AnyCall MSG๊ฐ ํฌํจํ๋ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- To. Cloud: ํจ์ ์คํ ๋์ ํด๋ผ์ฐ๋(๋ฑ๋ก๋ Cloud Connection Name) - Function ID: ์ถ๊ฐํ ํจ์ ์ด๋ฆ(๋ฌธ์์ด) - input List: ํจ์ ์ ๋ ฅ ์ธ์ ๋ฆฌ์คํธ(Key-Value List) - output List: ํจ์ ๋ฐํ ์ ๋ณด ๋ฆฌ์คํธ(Key-Value List)
- (2) AnyCall API
- ์ฌ์ฉ์๊ฐ ์ ์ํ
(1)AnyCall MSG
๋ฅผ Spider Server์ ์ ๋ฌ ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ฃผ๋ ๋ฒ์ฉ REST API์ด๋ฉฐ, - REST API ์ธ๋ถ ๊ท๊ฒฉ์ ์๋ ์์๋ฅผ ์ฐธ๊ณ ํ๋ค.
- ์ฌ์ฉ์๊ฐ ์ ์ํ
- (3) AnyCall Handler
AnyCall Handler
๋ API ํ์ฅ ๋์ Cloud Driver๋ณ๋ก ์กด์ฌํ๋ฉฐ,(2)AnyCall API
๋ฅผ ํตํด์ ์ ๋ฌ๋๋ ์คํ ์์ฒญ(AnyCall Input MSG) ์ ๋ณด๋ฅผ ํ์ฉํ์ฌ- ์ฌ์ฉ์๊ฐ ์ถ๊ฐํ ๋์ ํจ์์ ํธ์ถ ๋ฐ ๊ฒฐ๊ณผ ๋ฐํ์ ๊ด์ฅํ๋ค.
- (4) Ext-Functions
- ์ฌ์ฉ์๊ฐ ์ถ๊ฐํ๊ณ ์ ํ๋ API๋ฅผ ๊ตฌํํ ํจ์๋ก ๊ฐ๋ฐ ๋ฐฉ๋ฒ ๋ฑ ์ธ๋ถ ๋ด์ฉ์ ์๋ ์์๋ฅผ ์ฐธ๊ณ ํ๋ค.
- (1) AnyCall MSG
[AnyCall API Extension Example]
-
๋ณธ ์์๋ Mock Driver๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ด๋ ํ๋ค.
-
์ ๊ท Mock Driver๋ VPC ๋ฐ Security Group(SG) ๋ฑ์ ์์ ๊ฐ์ ๋ง์ ์ ๊ณตํ๋ API๋ ์ ๊ณตํ์ง ์๋๋ค.
-
๋ณธ ์์์์๋ AnyCall ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ VPC, SG์ ๋ํ ๊ฐ์๋ฅผ ์ ๊ณตํ๋ API ํ์ฅ ๋ฐฉ๋ฒ์ ๋ํด ๊ธฐ์ ํ๋ค.
-
(1) AnyCall MSG ์ ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- To. Cloud(Connection Name):
mock-config01
(์ํฉ์ ๋ง๊ฒ ๊ฐ๋ณ) - Funcion ID:
countAll
- Input List:
{ "Key" : "rsType", "Value" : "vpc" }
// Value= vpc or sg - Output List:
{ "Key" : "Count", "Value" : "10" }
// Value= depend on resource number
- To. Cloud(Connection Name):
-
(2) AnyCall REST API ํธ์ถ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
curl -sX POST http://localhost:1024/spider/anycall -H 'Content-Type: application/json' -d \ '{ "ConnectionName" : "mock-config01", "ReqInfo" : { "FID" : "countAll", "IKeyValueList" : [{"Key":"rsType", "Value":"vpc"}] } }' | json_pp
- ์คํ ๊ฒฐ๊ณผ์ธ
AnyCall Output MSG
์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
{ "FID" : "countAll", "IKeyValueList" : [ { "Key" : "rsType", "Value" : "vpc" } ], "OKeyValueList" : [ { "Key" : "Count", "Value" : "10" } ] }
- ์คํ ๊ฒฐ๊ณผ์ธ
-
(3) AnyCallHandler ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- 44-45 Line ์ฐธ๊ณ
39 func (anyCallHandler *MockAnyCallHandler) AnyCall(callInfo irs.AnyCallInfo) (irs.AnyCallInfo, error) { 40 cblogger := cblog.GetLogger("CB-SPIDER") 41 cblogger.Info("Mock Driver: called AnyCall()!") 42 43 switch callInfo.FID { 44 case "countAll" : 45 return countAll(anyCallHandler, callInfo) 46 47 // add more ... 48 49 default : 50 return irs.AnyCallInfo{}, errors.New("Mock Driver: " + callInfo.FID + " Function is not implemented!") 51 } 52 }
-
(4) Ext-Function countAll()์ ๊ตฌํ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
55 /////////////////////////////////////////////////////////////////// 56 // implemented by developer user, like 'countAll(rsType string) int' 57 /////////////////////////////////////////////////////////////////// 58 func countAll(anyCallHandler *MockAnyCallHandler, callInfo irs.AnyCallInfo) (irs.AnyCallInfo, error) { 59 cblogger := cblog.GetLogger("CB-SPIDER") 60 cblogger.Info("Mock Driver: called AnyCall()/countAll()!") 61 62 mockName := anyCallHandler.MockName 63 64 // Input Arg Validation 65 if callInfo.IKeyValueList == nil { 66 return irs.AnyCallInfo{}, errors.New("Mock Driver: " + callInfo.FID + "'s Argument is empty!") 67 } 68 if callInfo.IKeyValueList[0].Key != "rsType" { 69 return irs.AnyCallInfo{}, errors.New("Mock Driver: " + callInfo.FID + "'s Argument is not 'rsType'!") 70 } 71 72 // get info 73 strCount := "" 74 switch callInfo.IKeyValueList[0].Value { 75 case "vpc": 76 infoList, ok := vpcInfoMap[mockName] 77 if !ok { 78 strCount = "0" 79 } else { 80 strCount = strconv.Itoa(len(infoList)) 81 } 82 case "sg": 83 infoList, ok := securityInfoMap[mockName] 84 if !ok { 85 strCount = "0" 86 } else { 87 strCount = strconv.Itoa(len(infoList)) 88 } 89 } 90 91 // make results 92 if callInfo.OKeyValueList == nil { 93 callInfo.OKeyValueList = []irs.KeyValue{} 94 } 95 callInfo.OKeyValueList = append(callInfo.OKeyValueList, irs.KeyValue{"Count", strCount} ) 96 97 return callInfo, nil 98 }
[AnyCall API Extension AWS Driver ์ ์ฉ ์ฌ๋ก]
- AWS Driver์
createTags
,associateIamInstanceProfile
,getRegionInfo
๋ฑ์ ์ ์ฉ ์ฌ๋ก
- AWS Driver์
aws cost explorer:getCostAndUsageWithResources()
์ ์ฉ ์ฌ๋ก- ์ธ๋ถ ๋ด์ฉ: https://github.com/cloud-barista/cb-spider/pull/1309
[AnyCall API Extension GCP Driver ์ ์ฉ ์ฌ๋ก]
- GCP Driver์
TPU
์ ์ฉ ์ฌ๋ก- GCP/TPU ์ ๊ณต์ ์ํ ํ์ฅ API
-
- CB-Spider๋ฅผ ํ์ฉํ TPU ๊ธฐ๋ฐ AI ์ธํ๋ผ ํ์ฉ ํ๋ฆ
-
- ์ฝ๋ ์ฐธ๊ณ : 2c74d37
- ๋ง์ผ, ๋์ Driver์ AnyCallHandler๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ค์์ ์ฐธ๊ณ ํ์ฌ ์ถ๊ฐํ๋ค.
- ์ ๊ท AnyCallHandler ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
- (1) ๋ค์ ์์๋ฅผ ์ฐธ๊ณ ํ์ฌ
{driver}/connect/*
์์น์ CreateAnyCallHandler() ํจ์ ์ถ๊ฐ- ์์: MockCloudConnection.go
- (2) ๋ค์ ์์๋ฅผ ์ฐธ๊ณ ํ์ฌ
{driver}/resources/AnyCallHandler.go
๋ฅผ ์ถ๊ฐ- ์์: AnyCallHandler.go
- (1) ๋ค์ ์์๋ฅผ ์ฐธ๊ณ ํ์ฌ