Price Info and Cloud Driver API - cloud-barista/cb-spider GitHub Wiki

โ€ป CB-Spider Multi-Cloud Price Information Documentation


Multi-Cloud Price Info Features and Cloud Driver API

โ—‰ CB-Spider Price Info Specification V0.1

[Notice]

โ€ป CB-Spider๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ฐ€๊ฒฉ ์ •๋ณด๋Š” ๋Œ€์ƒ CSP API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ œ๊ณตํ•œ๋‹ค.
  - ๊ฐ€๊ฒฉ ๋ฐ ์š”๊ธˆ ์‚ฐ์ • ๊ธฐ์ค€ ๋“ฑ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋Š” CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

โ€ป ๋Œ€์ƒ CSP์˜ ๋ชจ๋“  ์ œํ’ˆ์— ๋Œ€ํ•œ ๊ฐ€๊ฒฉ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  - ์ด ๊ฒฝ์šฐ ๋Œ€์ƒ CSP๊ฐ€ API๋ฅผ ํ†ตํ•ด์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์ •๋ณด์ผ ์ˆ˜๋„ ์žˆ๊ณ ,
  - CB-Spider์˜ ์ œ๊ณต ๋ฒ”์œ„๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค.
  - ๋˜ํ•œ, ์ถ”์ƒํ™” ๊ณผ์ •์—์„œ ๋ˆ„๋ฝ ๋˜์—ˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

โ€ป API ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ์—๋Š” ๋Œ€์ƒ CSP์— ๋”ฐ๋ผ ์ผ๋ถ€ ์ •๋ณด๊ฐ€ ์ œ๊ณต ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. 
  - ์ด ๊ฒฝ์šฐ 'NA'๋กœ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋‹ค. (NA: Not Applicable)
  - ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋Š” ์ฃผ๋กœ ๋Œ€์ƒ CSP์—๊ฒŒ๋Š” ๊ณผ๊ธˆ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ์ •๋ณด ์ด๊ฑฐ๋‚˜, 
    - ๋Œ€์ƒ CSP API๋กœ ์ œ๊ณต๋˜์ง€ ์•Š๋Š” ์ •๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.
    - ๋˜ํ•œ, ์ถ”์ƒํ™” ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ ๋ˆ„๋ฝ ๋˜์—ˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

โ€ป ์ œ๊ณต ๋˜๋Š” ๊ฐ€๊ฒฉ์€ ์‹ค์ œ ์ œ๊ณต ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๊ฒฉ๊ณผ๋Š” ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  - ์ด ๊ฒฝ์šฐ ๋Œ€์ƒ CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด ์‚ฐ์ถœ ์กฐ๊ฑด ์ž…๋ ฅ์ด ๋‹ฌ๋ผ์„œ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  - ๋˜ํ•œ, ํ”„๋กœ๋ชจ์…˜ ๋“ฑ์˜ ๋ฐ˜์˜ ๋˜์ง€ ์•Š์€ ๊ฐ€๊ฒฉ์ผ ์ˆ˜ ์žˆ๋‹ค.
  - ๋”ฐ๋ผ์„œ, ์ •๋ฐ€ํ•œ ํด๋ผ์šฐ๋“œ ์˜ˆ์‚ฐ ๊ณ„ํš์— ํ™œ์šฉ ์‹œ์—๋Š” ์ด๋Ÿฌํ•œ ์˜ค์ฐจ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

1. CB-Spider ๊ฐ€๊ฒฉ ์ •๋ณด ๊ฐœ์š”

  • CB-Spider๋Š” ์—ฐ๋™ ๋Œ€์ƒ ํด๋ผ์šฐ๋“œ(CSP)๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํŒ… ์ธํ”„๋ผ์˜ ๊ฐ€๊ฒฉ ์ •๋ณด(Price Info)๋ฅผ
    • ๋™์ผํ•œ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.
    • filter ๊ฒ€์ƒ‰์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” JSON ํฌ๋งท์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.
      • filter ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๋Œ€์ƒ field๋Š” ๋ชจ๋“  CSP๊ฐ€ ๋™์ผํ•˜๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” field๋กœ ์ œํ•œ ๋œ๋‹ค.
    • ๊ฐ€๊ฒฉ์„ ๊ฒฐ์ • ์ง“๋Š” ์กฐ๊ฑด ๋ฐ ๊ณผ๊ธˆ ์ •์ฑ… ์กฐ๊ฑด ๋“ฑ
      • ๊ฐ€๊ฒฉ ์ •๋ณด ํŠน์„ฑ ์ƒ CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด์— ๋Œ€ํ•œ ์ถ”์ƒํ™” ๋ฐ ๋ณ€ํ™˜์„ ์ตœ์†Œํ™” ํ•˜๊ณ ,
      • CSP๋ณ„๋กœ ๊ฐ€๊ฒฉ ๋ฐ ๊ณผ๊ธˆ์— ์˜๋ฏธ ์žˆ๋Š” ์ •๋ณด๋Š” ๋Œ€์ƒ CSP ์›ํ˜• ์ •๋ณด๋ฅผ ๊ทธ๋Œ€๋กœ ํฌํ•จํ•˜์—ฌ ์ œ๊ณตํ•œ๋‹ค.
  • ๊ฐ€๊ฒฉ ์ •๋ณด ์ œ๊ณต ๊ตฌ์กฐ
    • CB-Spider๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด ์ œ๊ณต ๊ตฌ์กฐ๋Š” ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๊ณ , ์ฃผ์š” ์ฒ˜๋ฆฌ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • ์‚ฌ์šฉ์ž๋Š” Global Schema View(JSON ๊ตฌ์กฐ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ filter ๊ธฐ๋ฐ˜ ์งˆ์˜(G-Query; Global-Query) ์š”์ฒญ
    • Driver๋Š” ๋Œ€์ƒ CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” Local Schema(JSON ๊ตฌ์กฐ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ CSP API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์งˆ์˜(L-Query; Local-Query) ์š”์ฒญ
    • Driver๋Š” L-Query ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ Global Schema View๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” JSON ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ œ๊ณต

2. CB-Spider ๊ฐ€๊ฒฉ ์ •๋ณด ์ œ๊ณต ๋Œ€์ƒ ์„œ๋น„์Šค ๋ถ„๋ฅ˜(์ œํ’ˆ Family or ์ œํ’ˆ Category)

  • CB-Spider๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด ์ œ๊ณต ๋Œ€์ƒ ์ œํ’ˆ์€ ์ปดํ“จํŒ… ์ธํ”„๋ผ ๊ด€๋ จ ์„œ๋น„์Šค์ด๋ฉฐ,
    • CSP๋ณ„๋กœ ์ปดํ“จํŒ… ์ธํ”„๋ผ ์„œ๋น„์Šค ๋ถ„๋ฅ˜(์ œํ’ˆ Family or ์ œํ’ˆ Category)๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  • CB-Spider๋Š” ๋Œ€์ƒ CSP API๋ฅผ ์ด์šฉํ•˜์—ฌ CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ œํ’ˆ Family(Category) ๋ชฉ๋ก์„ ์ถ”์ถœ ๋ฐ ์ œ๊ณตํ•˜๋ฉฐ,
    • AWS ๊ฒฝ์šฐ CB-Spider API๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ œํ’ˆ Family ์˜ˆ์‹œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
      "CPU Credits"
      "Compute Instance (bare metal)"
      "Compute Instance"
      "Data Transfer"
      "Dedicated Host"
      "EBS direct API Requests"
      "Elastic Graphics"
      "Fast Snapshot Restore"
      "Fee"
      "IP Address"
      "Load Balancer"
      "Load Balancer-Application"
      "Load Balancer-Network"
      "NAT Gateway"
      "Provisioned Throughput"
      "Storage Snapshot"
      "Storage"                   // EBS(Data-Disk)
      "System Operation"
      
  • ListProductFamily() API๊ด€๋ จ:
    • ProductFamily ์ด๋ฆ„์€ CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์ œ๊ณตํ•˜๋ฉฐ,
    • ์ œ๊ณตํ•˜๋Š” ๋ชฉ๋ก์€ ํ˜„์žฌ Driver๊ฐ€ ์ œ๊ณตํ•˜๋Š” ProductFamily ๋ชฉ๋ก์„ ์ œ๊ณตํ•œ๋‹ค.

3. CB-Spider ๊ฐ€๊ฒฉ ์ •๋ณด ๊ตฌ์กฐ ๋ฐ ์ถ”์ƒํ™” ๊ฐœ์š”

  • CB-Spider๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด ์ฃผ์š” ๊ตฌ์กฐ(JSON ๊ตฌ์กฐ)๋Š” ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

    • (1) ํด๋ผ์šฐ๋“œ ๊ฐ€๊ฒฉ ๋ฆฌ์ŠคํŠธ(json:"cloudPriceList")
      • (2) CSP ์ด๋ฆ„ ๋ฐ (3) ๊ฐ€๊ฒฉ ๋ฆฌ์ŠคํŠธ ์ •๋ณด๋ฅผ ํ•œ ์„ธํŠธ๋กœ Array ํ˜•ํƒœ๋กœ ๋ฐ˜๋ณต ํฌํ•จํ•œ๋‹ค.
    • (2) CSP ์ด๋ฆ„(json:"cloudName")
      • ๊ฐ€๊ฒฉ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œํ‚ฌ ๋Œ€์ƒ CSP ์ด๋ฆ„(Cloud ์ด๋ฆ„)
    • (3) ๊ฐ€๊ฒฉ ๋ฆฌ์ŠคํŠธ(json:"priceList")
      • (4) ์ œํ’ˆ ์ •๋ณด ๋ฐ (5) ๊ฐ€๊ฒฉ ์ •๋ณด๋ฅผ ํ•œ ์„ธํŠธ๋กœ Array ํ˜•ํƒœ๋กœ ๋ฐ˜๋ณต ํฌํ•จํ•œ๋‹ค.
    • (4) ์ œํ’ˆ ์ •๋ณด(json:"productInfo")
      • ์ œํ’ˆ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ œํ’ˆ ID, ์ œ๊ณต ๋ฆฌ์ „ ์ด๋ฆ„ ๋ฐ ์ œํ’ˆ์˜ ์†์„ฑ ์ •๋ณด ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค.
    • (5) ๊ฐ€๊ฒฉ ์ •๋ณด(json:"priceInfo")
      • ๊ฐ€๊ฒฉ ์ •๋ณด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ (6) ๊ฐ€๊ฒฉ ์ •์ฑ…์„ ํฌํ•จํ•œ๋‹ค.
    • (6) ๊ฐ€๊ฒฉ ์ •์ฑ…(json:"pricePolicies")
      • ์ œํ’ˆ ์‚ฌ์šฉ ์‹œ ๊ณผ๊ธˆ ์ฑ…์ • ๋ฐฉ๋ฒ• ๋ฐ ๋น„์šฉ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • CB-Spider ๊ฐ€๊ฒฉ ์ •๋ณด ์ถ”์ƒํ™” ๊ตฌ์กฐ ๋ฐ CSP ์›๋ณธ ์ •๋ณด

    • CB-Spider๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด ์˜ˆ์‹œ(JSON format)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

      {
          "meta": {
              "version": "v0.1",
              "description": "Multi-Cloud Price Info"
          },
          "cloudPriceList": [
              {
                  "cloudName": "AWS",
                  "priceList": [
                      {
                          "productInfo": {
                              "productId": "2223RRAP6Z3VBN3N",
                              "regionName": "us-east-1",
                              "zoneName": "NA",
                              "instanceType": "c5d.2xlarge",
                              "vcpu": "8",
                              "memory": "16 GiB",
                              "storage": "1 x 200 NVMe SSD",
                              "gpu": "2", 
                              "gpuMemory": "NA",
                              "operatingSystem": "RHEL",
                              "preInstalledSw": "SQL Web",
                              "description": "Any helpful information",
                              + "cspProductInfo": { ... }            <=====
                          }, 
                          "priceInfo": {                        
                              "pricingPolicies": [
                                  {
                                      "pricingId": "2223B6PCG6QAUYY6.JRTCKXETXF",
                                      "pricingPolicy": "OnDemand",                                
                                      "unit": "Hrs",
                                      "currency": "USD",
                                      "price" : "0.2773000000",
                                      "description": "$0.2773 per Dedicated Windows with SQL Web c6i.large Instance Hour"
                                  },
                                  {
                                      "pricingId": "2223B6PCG6QAUYY6.7NE97W5U4E",
                                      "pricingPolicy": "Reserved",
                                      "pricingPolicyInfo": {
                                          "LeaseContractLength": "1yr",
                                          "OfferingClass": "convertible",
                                          "PurchaseOption": "No Upfront"
                                      },
                                      "unit": "Hrs",
                                      "currency": "USD",
                                      "price" : "0.2489500000",
                                      "description": "Windows with SQL Server Web (Amazon VPC), c6i.large reserved instance applied"
                                  }
                              ],
                              + "cspPriceInfo": { ... }         <====                            
                          }
                      }
                  ]
              }
          ]
      }
      
    • ์˜ˆ์‹œ์— ํ‘œ์‹œ๋œ ๋‹ค์Œ 2๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ •๋ณด๋“ค์€ ์ถ”์ƒํ™”๋œ ์ •๋ณด์ด๋‹ค.

      • (1) ์ œํ’ˆ ์ •๋ณด(productInfo)์— ํฌํ•จ๋œ cspProductInfo: ๋Œ€์ƒ CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ œํ’ˆ ๊ด€๋ จ ์›๋ณธ ์ •๋ณด๋ฅผ ํฌํ•จ(JSON ๊ตฌ์กฐ, CSP๋ณ„ ์ž์ฒด ๊ตฌ์กฐ ์ œ๊ณต)
      • (2) ๊ฐ€๊ฒฉ ์ •๋ณด(priceInfo)์— ํฌํ•จ๋œ cspPriceInfo: ๋Œ€์ƒ CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€๊ฒฉ ๊ด€๋ จ ์›๋ณธ ์ •๋ณด๋ฅผ ํฌํ•จ(JSON ๊ตฌ์กฐ, CSP๋ณ„ ์ž์ฒด ๊ตฌ์กฐ ์ œ๊ณต)
    • ์ถ”์ƒํ™”๋œ ์ •๋ณด๋Š” ๋ชจ๋“  CSP์— ๋Œ€ํ•ด์„œ ๊ฐ€๋Šฅํ•œ ๋™์ผํ•œ ๊ตฌ์กฐ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ,

    • ์‚ฌ์šฉ์ž๋Š” ์ถ”์ƒํ™”๋œ ์ •๋ณด์— ๋Œ€ํ•ด์„œ๋งŒ Filter ๊ฒ€์ƒ‰์„ ์š”์ฒญํ•  ์ˆ˜์žˆ๋‹ค.

    • CB-Spider JSON ํฌ๋งท์˜ AWS ๊ฐ€๊ฒฉ ์ •๋ณด ์˜ˆ์‹œ(โ€ป AWS ์›๋ณธ ์ •๋ณด ๊ตฌ์กฐ๋Š” AWS Driver ๊ฐœ๋ฐœ ์‹œ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์Œ)

      {
          "meta": {
              "version": "v0.1",
              "description": "Multi-Cloud Price Info"
          },
          "cloudPriceList": [
              {
                  "cloudName": "AWS",
                  "priceList": [
                      {
                          "productInfo": {
                              "productId": "2223RRAP6Z3VBN3N",
                              "regionName": "us-east-1",
                              "zoneName": "NA",
                              "instanceType": "c5d.2xlarge",
                              "vcpu": "8",
                              "memory": "16 GiB",
                              "storage": "1 x 200 NVMe SSD",
                              "gpu": "2", 
                              "gpuMemory": "NA",
                              "operatingSystem": "RHEL",
                              "preInstalledSw": "SQL Web",
                              "description": "Any helpful information",
                              "cspProductInfo": {
                                  "productFamily": "Compute Instance",
                                  "attributes": {
                                      "enhancedNetworkingSupported": "Yes",
                                      "intelTurboAvailable": "Yes",
                                      "memory": "16 GiB",
                                      "dedicatedEbsThroughput": "Up to 2250 Mbps",
                                      "vcpu": "8",
                                      "classicnetworkingsupport": "false",
                                      "capacitystatus": "Used",
                                      "locationType": "AWS Region",
                                      "storage": "1 x 200 NVMe SSD",
                                      "instanceFamily": "Compute optimized",
                                      "operatingSystem": "RHEL",
                                      "intelAvx2Available": "Yes",
                                      "regionCode": "us-east-1",
                                      "physicalProcessor": "Intel Xeon Platinum 8124M",
                                      "clockSpeed": "3 GHz",
                                      "ecu": "39",
                                      "networkPerformance": "Up to 10 Gigabit",
                                      "servicename": "Amazon Elastic Compute Cloud",
                                      "gpuMemory": "NA",
                                      "vpcnetworkingsupport": "true",
                                      "instanceType": "c5d.2xlarge",
                                      "tenancy": "Shared",
                                      "usagetype": "BoxUsage:c5d.2xlarge",
                                      "normalizationSizeFactor": "16",
                                      "intelAvxAvailable": "Yes",
                                      "processorFeatures": "Intel AVX; Intel AVX2; Intel AVX512; Intel Turbo",
                                      "servicecode": "AmazonEC2",
                                      "licenseModel": "No License required",
                                      "currentGeneration": "Yes",
                                      "preInstalledSw": "SQL Web",
                                      "location": "US East (N. Virginia)",
                                      "processorArchitecture": "64-bit",
                                      "marketoption": "OnDemand",
                                      "operation": "RunInstances: 0210",
                                      "availabilityzone": "NA"
                                  },
                                  "sku": "2223RRAP6Z3VBN3N"
                              }
                          }, 
                          "priceInfo": {                        
                              "pricingPolicies": [
                                  {
                                      "pricingId": "2223B6PCG6QAUYY6.JRTCKXETXF",
                                      "pricingPolicy": "OnDemand",                                
                                      "unit": "Hrs",
                                      "currency": "USD",
                                      "price" : "0.2773000000",
                                      "description": "$0.2773 per Dedicated Windows with SQL Web c6i.large Instance Hour"
                                  },
                                  {
                                      "pricingId": "2223B6PCG6QAUYY6.7NE97W5U4E",
                                      "pricingPolicy": "Reserved",
                                      "pricingPolicyInfo": {
                                          "LeaseContractLength": "1yr",
                                          "OfferingClass": "convertible",
                                          "PurchaseOption": "No Upfront"
                                      },
                                      "unit": "Hrs",
                                      "currency": "USD",
                                      "price" : "0.2489500000",
                                      "description": "Windows with SQL Server Web (Amazon VPC), c6i.large reserved instance applied"
                                  }
                              ],
                              "cspPriceInfo": {
                                  "OnDemand": {
                                      "2223B6PCG6QAUYY6.JRTCKXETXF": {
                                          "priceDimensions": {
                                              "2223B6PCG6QAUYY6.JRTCKXETXF.6YS6EN2CT7": {
                                                  "unit": "Hrs",
                                                  "endRange": "Inf",
                                                  "description": "$0.2773 per Dedicated Windows with SQL Web c6i.large Instance Hour",
                                                  "appliesTo": [],
                                                  "rateCode": "2223B6PCG6QAUYY6.JRTCKXETXF.6YS6EN2CT7",
                                                  "beginRange": "0",
                                                  "pricePerUnit": {
                                                      "USD": "0.2773000000"
                                                  }
                                              }
                                          },
                                          "sku": "2223B6PCG6QAUYY6",
                                          "effectiveDate": "2023-11-01T00: 00: 00Z",
                                          "offerTermCode": "JRTCKXETXF",
                                          "termAttributes": {}
                                      }
                                  },
                                  "Reserved": {
                                      "2223B6PCG6QAUYY6.7NE97W5U4E": {
                                          "priceDimensions": {
                                              "2223B6PCG6QAUYY6.7NE97W5U4E.6YS6EN2CT7": {
                                                  "unit": "Hrs",
                                                  "endRange": "Inf",
                                                  "description": "Windows with SQL Server Web (Amazon VPC), c6i.large reserved instance applied",
                                                  "appliesTo": [],
                                                  "rateCode": "2223B6PCG6QAUYY6.7NE97W5U4E.6YS6EN2CT7",
                                                  "beginRange": "0",
                                                  "pricePerUnit": {
                                                      "USD": "0.2489500000"
                                                  }
                                              }
                                          },
                                          "sku": "2223B6PCG6QAUYY6",
                                          "effectiveDate": "2022-04-01T00: 00: 00Z",
                                          "offerTermCode": "7NE97W5U4E",
                                          "termAttributes": {
                                              "LeaseContractLength": "1yr",
                                              "OfferingClass": "convertible",
                                              "PurchaseOption": "No Upfront"
                                          }
                                      },
                                      "2223B6PCG6QAUYY6.4NA7Y494T4": {
                                          "priceDimensions": {
                                              "2223B6PCG6QAUYY6.4NA7Y494T4.6YS6EN2CT7": {
                                                  "unit": "Hrs",
                                                  "endRange": "Inf",
                                                  "description": "Windows with SQL Server Web (Amazon VPC), c6i.large reserved instance applied",
                                                  "appliesTo": [],
                                                  "rateCode": "2223B6PCG6QAUYY6.4NA7Y494T4.6YS6EN2CT7",
                                                  "beginRange": "0",
                                                  "pricePerUnit": {
                                                      "USD": "0.2372200000"
                                                  }
                                              }
                                          },
                                          "sku": "2223B6PCG6QAUYY6",
                                          "effectiveDate": "2022-04-01T00: 00: 00Z",
                                          "offerTermCode": "4NA7Y494T4",
                                          "termAttributes": {
                                              "LeaseContractLength": "1yr",
                                              "OfferingClass": "standard",
                                              "PurchaseOption": "No Upfront"
                                          }
                                      }
                                  }
                              }
                          }
                      }
                  ]
              }
          ]
      }
      
  • ์ œํ’ˆ ์ข…๋ฅ˜๋ณ„(Product Family or Category ๋“ฑ) productInfo ์ถ”์ƒํ™” ์ •๋ณด ๊ตฌ์กฐ

    • ์ œํ’ˆ Family ๋Œ€์ƒ์— ๋”ฐ๋ผ ์ œ๊ณต๋˜๋Š” ์ •๋ณด๊ฐ€ ๋‹ค๋ฅด๋ฉฐ, ๊ทธ ๊ตฌ์กฐ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    • Compute Instance Family(Category) ์ถ”์ƒํ™” ์ •๋ณด ๊ตฌ์กฐ

      "productInfo": {
          "productId": "2223RRAP6Z3VBN3N",
          "regionName": "us-east-1",
          "zoneName": "NA",
      
          "instanceType": "c5d.2xlarge",
          "vcpu": "8",
          "memory": "16 GiB",
          "storage": "1 x 200 NVMe SSD",
          "gpu": "2", 
          "gpuMemory": "NA",
          "operatingSystem": "RHEL",
          "preInstalledSw": "SQL Web",
      
          "description": "Any helpful information",
          + "cspProductInfo": { ... }            <=====
      }, 
      
    • Storage(Data-Disk) Family(Category) ์ถ”์ƒํ™” ์ •๋ณด ๊ตฌ์กฐ

      "productInfo": {
          "productId": "2223RRAP6Z3VBN3N",
          "regionName": "us-east-1",
          "zoneName": "NA",
      
          "volumeType": "Magnetic",
          "storageMedia": "HDD-backed",
          "maxVolumeSize": "1 TiB",
          "maxIopsvolume": "40 - 200",
          "maxThroughputvolume": "40 - 90 MB/sec",
      
          "description": "Any helpful information",
          + "cspProductInfo": { ... }            <=====
      }
      
    • ๊ทธ ์™ธ ์ œํ’ˆ๋“ค์— ๋Œ€ํ•œ ์ถ”์ƒํ™” ์ •๋ณด ๊ตฌ์กฐ

      "productInfo": {
          "productId": "2223RRAP6Z3VBN3N",
          "regionName": "us-east-1",
          "zoneName": "NA",
          "description": "Any helpful information",
          + "cspProductInfo": { ... }            <=====
      }, 
      
  • API Filter ๊ทœ๊ฒฉ/์กฐ๊ฑด

    • ๊ฐ€๊ฒฉ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” API๋Š” ์ธ์ž๋กœ Filter ์„ค์ •์„ ์ œ๊ณตํ•œ๋‹ค.
    • Filter๋Š” KeyValue Array๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, (Strict Match)
    • API๋Š” Array์— ํฌํ•จ๋œ KeyValue ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑ(AND Condition)ํ•˜๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    • Filter๋Š” ๋ชจ๋“  CSP์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ถ”์ƒํ™”๋œ Field(Key)์—๋งŒ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

4. Price Info Driver Common API

  • Source Tree

    $tree cb-spider/cloud-control-manager/cloud-driver/interfaces/
    cb-spider/cloud-control-manager/cloud-driver/interfaces/
    |-- CloudDriver.go
    |-- README.md
    |-- connect
    |   `-- CloudConnect.go
    `-- resources
        |-- AnyCallHandler.go
        |-- ClusterHandler.go
        |-- DiskHandler.go
        |-- IId.go
        |-- ImageHandler.go
        |-- KeyPairHandler.go
        |-- KeyValue.go
        |-- MyImageHandler.go
        |-- NLBHandler.go
        |-- PriceInfoHandler.go    <================= Price Info Driver API
        |-- RegionZoneHandler.go
        |-- SecurityHandler.go
        |-- VMHandler.go
        |-- VMSpecHandler.go
        `-- VPCHandler.go
    
    
  • Driver API Spec (latest)

          // Cloud Driver Interface of CB-Spider.
          // The CB-Spider is a sub-Framework of the Cloud-Barista Multi-Cloud Project.
          // The CB-Spider Mission is to connect all the clouds with a single interface.
          //
          //      * Cloud-Barista: https://github.com/cloud-barista
          //
          // This is Resouces interfaces of Cloud Driver.
          //
          // by CB-Spider Team, 2023.11.
    
          package resources
    
          type CloudPriceData struct {
                  Meta           Meta         `json:"meta"`
                  CloudPriceList []CloudPrice `json:"cloudPriceList"`
          }
    
          type Meta struct {
                  Version     string `json:"version"`
                  Description string `json:"description"`
          }
    
          type CloudPrice struct {
                  CloudName string  `json:"cloudName"`
                  PriceList []Price `json:"priceList"`
          }
    
          type Price struct {
                  ProductInfo ProductInfo `json:"productInfo"`
                  PriceInfo   PriceInfo   `json:"priceInfo"`
          }
    
          type ProductInfo struct {
                  ProductId  string `json:"productId"`
                  RegionName string `json:"regionName"`
                  ZoneName   string `json:"zoneName"`
    
                  //--------- Compute Instance
                  InstanceType    string `json:"instanceType,omitempty"`
                  Vcpu            string `json:"vcpu,omitempty"`
                  Memory          string `json:"memory,omitempty"`
                  Storage         string `json:"storage,omitempty"`        // Root-Disk
                  Gpu             string `json:"gpu,omitempty"`
                  GpuMemory       string `json:"gpuMemory,omitempty"`
                  OperatingSystem string `json:"operatingSystem,omitempty"`
                  PreInstalledSw  string `json:"preInstalledSw,omitempty"`
                  //--------- Compute Instance
    
                  //--------- Storage  // Data-Disk(AWS:EBS)
                  VolumeType          string `json:"volumeType,omitempty"`
                  StorageMedia        string `json:"storageMedia,omitempty"`
                  MaxVolumeSize       string `json:"maxVolumeSize,omitempty"`
                  MaxIOPSVolume       string `json:"maxIopsvolume,omitempty"`
                  MaxThroughputVolume string `json:"maxThroughputvolume,omitempty"`
                  //--------- Storage. // Data-Disk(AWS:EBS)
    
                  Description    string      `json:"description"`
                  CSPProductInfo interface{} `json:"cspProductInfo"`
          }
    
          type PriceInfo struct {
                  PricingPolicies []PricingPolicies `json:"pricingPolicies"`
                  CSPPriceInfo    interface{}       `json:"cspPriceInfo"`
          }
    
          type PricingPolicies struct {
                  PricingId         string             `json:"pricingId"`
                  PricingPolicy     string             `json:"pricingPolicy"`
                  Unit              string             `json:"unit"`
                  Currency          string             `json:"currency"`
                  Price             string             `json:"price"`
                  Description       string             `json:"description"`
                  PricingPolicyInfo *PricingPolicyInfo `json:"pricingPolicyInfo,omitempty"`
          }
    
          type PricingPolicyInfo struct {
                  LeaseContractLength string `json:"LeaseContractLength"`
                  OfferingClass       string `json:"OfferingClass"`
                  PurchaseOption      string `json:"PurchaseOption"`
          }
    
          type PriceInfoHandler interface {
                  ListProductFamily(regionName string) ([]string, error)
                  GetPriceInfo(productFamily string, regionName string, filterList []KeyValue) (string, error) // return string: json format
          }
    
    

5. CB-Spider ๊ฐ€๊ฒฉ ์ •๋ณด API ํ™œ์šฉ ์ˆœ์„œ

  • ์‚ฌ์šฉ์ž์˜ ๋‹จ์ˆœ API ํ˜ธ์ถœ์—๋„ ๋‚ด๋ถ€์—์„œ ๋งŽ์€ ๊ฐ€๊ฒฉ ์ •๋ณด์— ๋Œ€ํ•œ ๋ณ€ํ™˜์œผ๋กœ ์ธํ•œ ๋†’์€ ๋ถ€ํ•˜๊ฐ€ ๋งค๋ฒˆ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ,
  • ์ผ๋‹จ, ๊ฐ€๊ฒฉ ์ •๋ณด ์ œ๊ณตํ•˜๋Š” API๋Š” ๋Œ€์ƒ ์ œํ’ˆ Family(Category)์™€ ๋Œ€์ƒ Region์„ ํ•„์ˆ˜ ์ž…๋ ฅ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.
  1. ListProductFamily() API๋ฅผ ํ†ตํ•ด์„œ product family(category) ๋ชฉ๋ก์„ ์–ป๊ณ , ์›ํ•˜๋Š” ๋Œ€์ƒ ์ œํ’ˆ family๋ฅผ ์„ ํƒํ•œ๋‹ค.
  2. ๊ฐ€๊ฒฉ ์ •๋ณด๋ฅผ ์›ํ•˜๋Š” ๋Œ€์ƒ Region์„ ์„ ํƒํ•œ๋‹ค. ํ•„์š”์‹œ Spider RegionZone API ํ™œ์šฉํ•œ๋‹ค.
  3. ์„ ํƒํ•œ product family ์ •๋ณด์™€ Region ์ด๋ฆ„ ๊ทธ๋ฆฌ๊ณ , ํ•„์š”์‹œ Filter๋ฅผ ์„ค์ •ํ•˜์—ฌ ๊ฐ€๊ฒฉ ์ •๋ณด API๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  4. ๋ฐ˜ํ™˜๋œ ๊ฒฐ๊ณผ JSON ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ  Filter๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ์žฌ ์š”์ฒญํ•˜์—ฌ ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ์˜ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ ์‹œํ‚จ๋‹ค.

Cloud Driver ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

  • Cloud Driver 1์ฐจ ๊ฐœ๋ฐœ ๋Œ€์ƒ

    • AWS
    • GCP
    • Alibaba
    • Tencent
    • Azure
    • IBM VPC
    • NCP Classic
    • NCP VPC
    • ์ œ์™ธ CSP(๋ถ„์„ ์ •๋ณด ์ฐธ๊ณ )
      • OpenStack: ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ
      • NHN, KT Classic, KT VPC: API๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ
  • CB-Spider์˜ ๊ฐ€๊ฒฉ ์ •๋ณด JSON ๊ตฌ์กฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ AWS๊ฐ€ ์ œ๊ณตํ•˜๋Š” JSON ๊ตฌ์กฐ๋ฅผ ๋งŽ์ด ์ฐธ๊ณ  ๋ฐ ๋ฐ˜์˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • ์‚ฌ์œ : ๊ฐ€์žฅ ์ž˜ ์ •์˜๋˜์–ด ์žˆ๊ณ , AWS์˜ ๊ฒฝ์šฐ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด ์ˆ˜๊ฐ€ ๋งŽ์•„์„œ ๊ฐ€๊ธ‰์  ๋ณ€ํ™˜ ๋ถ€ํ•˜ ์ตœ์†Œํ™” ๊ณ ๋ ค
    • ํ•˜์ง€๋งŒ, ํƒ€ CSP๋“ค์˜ ์ •๋ณด๋“ค๋„ ํ‘œํ˜„์ด ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ,
    • ์œ„์—์„œ ๋ณด์ด๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด ๊ตฌ์กฐ์™€ ๊ฐ™์ด ์•ฝํ•œ ์ถ”์ƒํ™”์™€ ์ฃผ์š” ์ •๋ณด์— ๋Œ€ํ•ด์„œ๋Š” CSP ์›๋ณธ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œ์ผœ์„œ,
    • ์‚ฌ์šฉ์ž๊ฐ€ API ๋ฐ API ๊ฒฐ๊ณผ๋ฅผ ์ต์ˆ™ํ•ด๊ฐ€๋ฉด์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์ œํ’ˆ ์ •๋ณด ์ถ”์ƒํ™”์˜ ๊ฒฝ์šฐ ๋Œ€์ƒ CSP์—์„œ๋Š” ์œ ์šฉํ•œ ์ •๋ณด์ธ๋ฐ ์ถ”์ƒํ™”๋œ Field(Key)๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š”

    • description field์— ์ถ”๊ฐ€ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    • ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ comma ๋“ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—์„œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
  • Key(Field) ์ด๋ฆ„์€ ๊ฐ€๊ธ‰์  camelCase ์ค€์ˆ˜ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

    • ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘, 2๋‹จ์–ด ์ด์ƒ์ผ ๊ฒฝ์šฐ 2๋ฒˆ์งธ ๋‹จ์–ด๋ถ€ํ„ฐ ์ฒซ๊ธ€์ž ๋Œ€๋ฌธ์ž
    • ์˜ˆ์‹œ: serviceName ๋“ฑ
    • ์˜ˆ์™ธ: CSP ์›๋ณธ ์ •๋ณด๋ฅผ ๊ทธ๋Œ€๋กœ ์ถ”๊ฐ€ํ•˜๋Š” cspProductInfo ๋ฐ cspPriceInfo์— ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ
  • ๋“œ๋ผ์ด๋ฒ„ ๋‚ด๋ถ€ ๋ณ€ํ™˜ ์‹œ์—๋Š” ๊ฐ€๊ธ‰์  ํ–ฅํ›„ ๋ณ€๊ฒฝ๋ ๋งŒํ•œ ์ •๋ณด๋Š” staticํ•˜๊ฒŒ ์ฑ„์šฐ์ง€ ๋งˆ์‹œ๊ณ , API๋กœ ์–ป์€ ๊ฐ’์„ ํ™œ์šฉํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

    • ์‚ฌ์œ : ๊ฐ€๊ฒฉ ์ œ๊ณต ์ •๋ณด๋Š” ๋ณ€๊ฒฝ๋  ํ™•๋ฅ ์ด ๋งŽ์Œ, staticํ•˜๊ฒŒ ์ง์ ‘ ์ž…๋ ฅ์‹œ ํ–ฅํ›„์— ์ž˜๋ชป๋œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Œ. ๊ฐ€๊ฒฉ ๊ด€๋ จ ์ž˜๋ชป๋œ ์ •๋ณด๋Š” ๋ฏผ๊ฐํ•  ์ˆ˜ ์žˆ์Œ
    • ์˜ˆ์‹œ: productFamily ๋ชฉ๋ก, API๋กœ ์–ป์€ ์ •๋ณด์—์„œ ์ถ”์ถœํ•˜์—ฌ ์ œ๊ณต, product family๊ฐ€ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์Œ
  • ๋Œ€์ƒ CSP์˜ ๊ฒฝ์šฐ ์ ์ ˆํ•œ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ NA๋กœ ํ‘œ์‹œ(N/A ์•„๋‹˜)

  • AWS๊ฐ€ ์•„๋‹Œ CSP์˜ ๊ฒฝ์šฐ ์ถ”์ƒํ™” ๊ตฌ์กฐ์— ์ž…๋ ฅ ๋˜๋Š” ๊ฐ’ ๋ณ€ํ™˜ ์‹œ์— ๊ฐ€์ด๋“œ ๋˜์ง€ ์•Š์€ ๊ฐ’ ๋“ค์€

    • ๊ฐ€๊ธ‰์  AWS ๊ธฐ์ค€์œผ๋กœ ์ ์šฉํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. (์˜ˆ: GB => GiB)
    • ๊ด€๋ จํ•˜์—ฌ, aws cli ๋ฐ price ์ •๋ณด๋ฅผ ์ด์šฉํ•œ AWS ๊ฐ€๊ฒฉ ์ •๋ณด ํ™œ์šฉ ์˜ˆ์‹œ๋“ค ์ž…๋‹ˆ๋‹ค. ํ•„์š”์‹œ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
      ๏ผƒ sku ๊ฐ’์ด 2223B6PCG6QAUYY6์ธ ๋ชจ๋“  product ์ค‘ 1๊ฐœ ์ถœ๋ ฅ
      aws pricing get-products --max-results 1 --service-code AmazonEC2 --filters Type=TERM_MATCH,Field=sku,Value=2223B6PCG6QAUYY6 | jq '.PriceList[] | fromjson'
      
      ๏ผƒ sku ๊ฐ’์ด 2223B6PCG6QAUYY6์ธ ๋ชจ๋“  product ์ถœ๋ ฅ => 1๊ฐœ์ž„
      aws pricing get-products --service-code AmazonEC2 --filters Type=TERM_MATCH,Field=sku,Value=2223B6PCG6QAUYY6 | jq '.PriceList[] | fromjson'
      
      # "CPU Credits" ์ œํ’ˆ ๊ฐ€๊ฒฉ ์ •๋ณด (Reserved ๊ฐ€๊ฒฉ ์ •์ฑ…์ด ์—†์Œ)
      aws pricing get-products --service-code AmazonEC2 --filters Type=TERM_MATCH,Field=productFamily,Value="CPU Credits" | jq '.PriceList[] | fromjson'
      
      # "Load Balancer" ์ œํ’ˆ ๊ฐ€๊ฒฉ ์ •๋ณด (Reserved ๊ฐ€๊ฒฉ ์ •์ฑ…์ด ์—†์Œ)
      aws pricing get-products --service-code AmazonEC2 --filters Type=TERM_MATCH,Field=productFamily,Value="Load Balancer" | jq '.PriceList[] | fromjson'
      
      # "Load Balancer"๋ฅผ ์ œ๊ณตํ•˜๋Š” Region ์ˆ˜ => 26
      aws pricing get-products --service-code AmazonEC2 --filters Type=TERM_MATCH,Field=productFamily,Value="Load Balancer" | jq '.PriceList[] | fromjson' | grep regionCode | sort | uniq |wc -l
      26
      
      # "Data Transfer" product 5๊ฐœ ์ถœ๋ ฅ
       aws pricing get-products --max-results 5 --service-code AmazonEC2 --filters Type=TERM_MATCH,Field="productFamily",Value="Data Transfer" | jq '.PriceList[] | fromjson'
      
          # ์ œ๊ณต๋˜๋Š” ๋ชจ๋“  product family list: ๋ชจ๋“  EC2 ๊ฐ€๊ฒฉ ์ •๋ณด ๋‹ค์šด๋กœ๋“œ ํ›„ ํ™œ์šฉ ๊ฐ€๋Šฅ
            (โ€ป ์ฃผ์˜: download ๋‚ด์šฉ์ด aws cli๋กœ ์–ป์—ˆ์„ ๋•Œ์™€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ๋ฐ field ์ด๋ฆ„์ด ๋‹ค๋ฅธ(๋ณต์ˆ˜) ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ)
      $ wget https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/index.json
          $ grep productFamily index.json | sort | uniq
      # ์‚ฌ์šฉ๋˜๋Š” unit ๊ฐ’๋“ค ํ™•์ธ: 'Hours'์™€ 'Hrs'๊ฐ€ ํ˜ผ์šฉ
      $ grep unit index.json | sort | uniq
          # ๊ณ„์•ฝ ๊ธฐ๊ฐ„ ์ข…๋ฅ˜ ํ™•์ธ : '1 yr'๊ณผ '1yr'๊ณผ ๊ฐ™์ด space๊ฐ€ ํฌํ•จ, ๋ฏธํฌํ•จ์ด ํ˜ผ์šฉ
          $ grep LeaseContractLength index.json | sort | uniq
      
      # S3 ์ œํ’ˆ ๋ฐ ๊ฐ€๊ฒฉ ์ •๋ณด ์ถœ๋ ฅ
      $ aws pricing get-products --max-results 5 --service-code AmazonS3 --filters "Type=TERM_MATCH,Field=location,Value='US East (N. Virginia)'" | jq '.PriceList[] | fromjson'
      
      # S3 Product Family ์ถœ๋ ฅ
      $ aws pricing get-products --service-code AmazonS3 --filters "Type=TERM_MATCH,Field=location,Value='US East (N. Virginia)'" | jq '.PriceList[] | fromjson' |grep productFamily |sort |uniq
                "productFamily": "API Request",
                "productFamily": "Fee",
                "productFamily": "Storage",
      
  • API ํ˜ธ์ถœ ๋น„์šฉ ๋ฐ QPS(Query/Sec)๊ณ ๋ คํ•˜์—ฌ

    • ๊ฐ€๊ธ‰์ , ์ตœ์†Œ ํšŸ์ˆ˜์˜ CSP API ํ˜ธ์ถœ ๊ฐœ๋ฐœ ํ•„์š”(ํ˜ธ์ถœ ๊ฒฐ๊ณผ ๋ฐ˜๋ณต ์‚ฌ์šฉ ๋“ฑ)
  • ํ†ตํ™”(currency) ๊ด€๋ จ

    • ๊ธฐ๋ณธ์ ์œผ๋กœ USD ๊ฐ’์œผ๋กœ๋งŒ ์ œ๊ณต
    • ๋Œ€์ƒ CSP๊ฐ€ USD ๊ฐ’ ํš๋“ ๋ถˆ๊ฐ€์‹œ,
      • CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” default ํ†ตํ™” ์ •๋ณด๋กœ ์ œ๊ณต(ํ™˜์œจ ์ ์šฉํ•œ ๋ณ€ํ™˜ ๊ธˆ์ง€)
  • Driver Price Info Interface์— ํฌํ•จ๋œ Struct๋“ค์€ ๋“œ๋ผ์ด๋ฒ„ ๋‚ด๋ถ€์—์„œ ํ•„์š”์‹œ ํ™œ์šฉํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

    • ๊ฒ€์ฆ์ด 100%๋œ struct๋“ค์ด ์•„๋‹ˆ์–ด์„œ, ํ™œ์šฉ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์ด์Šˆ ์‹ ๊ณ  ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
    • struct์€ ์•ˆ์“ฐ์…”๋„, ๋ฐ˜ํ™˜ ์ •๋ณด๋ฅผ ์œ„์—์„œ ์ œ๊ณตํ•ด๋“œ๋ฆฐ JSON ๊ตฌ์กฐ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ์•„๋งˆ๋„, ๋ณ€ํ™˜ ๊ณผ์ •์ด ํฌํ•จ๋˜์–ด API ์†Œ์š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฑธ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

    • Driver ๊ฐœ๋ฐœ ์ง„ํ–‰ ์‹œ์— 1๋ถ„ ์ด์ƒ ์†Œ์š” ๋˜๋Š” ๊ฒฝ์šฐ ๊ณต์œ  ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
  • ์•„๋งˆ๋„, AWS ์™ธ์— CSP๋“ค์˜ ๊ฒฝ์šฐ ๊ฐ€๊ฒฉ ์ •๋ณด ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๊ฑฐ๋‚˜ ๋ณ€ํ™˜์ด ๋ชจํ˜ธํ•œ ๋ถ€๋ถ„์ด ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

    • Driver ๊ฐœ๋ฐœ ์ง„ํ–‰ ์‹œ์— ๊ด€๋ จ๋œ ์ •๋ณด๋‚˜ ์ด์Šˆ๋ฅผ ๊ณต์œ ํ•ด์ฃผ์‹œ๋ฉด ํ•จ๊ป˜ ๊ณ ๋ฏผํ•ด๋ณด๋„๋กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

[Filter Test Case ๋ฐ Filter์— ๋”ฐ๋ฅธ ์˜ˆ์ƒ ๊ฒฐ๊ณผ]

  • Filter ์ ์šฉ ์กฐ๊ฑด ๋ฐ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ดํ•ด๋ฅผ ์œ„ํ•ด์„œ Mock Driver ๊ธฐ๋ฐ˜ ์‹œํ—˜ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์œ„์น˜: cb-spider/cloud-control-manager/cloud-driver/drivers/mock/test/priceinfo_test.go
    • ์‹œํ—˜ ํ•ญ๋ชฉ: Compute Instance, Storage, Network Load Balance 3์ข…์˜ Product Family์— ๋Œ€ํ•œ Filter ์ ์šฉ ์‹œํ—˜
    • ๋ชจ๋“  product family ์‹œํ—˜ ์‹คํ–‰ ๋ฐฉ๋ฒ•:
      • json ๊ฒฐ๊ณผ ์ถœ๋ ฅ์„ ์›ํ•  ๋•Œ: ./test-v-log-info-priceinfo_test.go.sh
      • ๊ฐ„๋‹จํžˆ ์‹œํ—˜ ๋กœ๊ทธ๋งŒ ์ถœ๋ ฅ์„ ์›ํ•  ๋•Œ: ./test-v-log-error-priceinfo_test.go.sh
    • Compute Instance ์‹œํ—˜๋งŒ ์‹คํ–‰ ๋ฐฉ๋ฒ•:
      • json ๊ฒฐ๊ณผ ์ถœ๋ ฅ์„ ์›ํ•  ๋•Œ: ./test-v-log-info-priceinfo_compute_instance_test.go.sh
      • ๊ฐ„๋‹จํžˆ ์‹œํ—˜ ๋กœ๊ทธ๋งŒ ์ถœ๋ ฅ์„ ์›ํ•  ๋•Œ: ./test-v-log-error-priceinfo_compute_instance_test.go.sh
  • Filter ์กฐ๊ฑด์€ ๊ฒฐ๊ณผ json์˜ cloudPriceList.priceList์— ํฌํ•จ๋  ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ… ์ฆ‰, {productInfo, priceInfo}์„ ๊ฒฐ์ •ํ•˜๋ฉฐ,
    • GetPriceInfo() ์ œ๊ณตํ•˜๋Š” ๊ฒฐ๊ณผ๋Š” filter ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€
      • empty cloudPriceList๋ฅผ ํฌํ•จํ•˜๋Š” Json์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      {
          "meta": {
              "version": "v0.1",
              "description": "Multi-Cloud Price Info"
          },
          "cloudPriceList": []
      } 
      
      • filter ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋™์ผ ๊ตฌ์กฐ์˜ Json์— cloudPriceList์— ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ํฌํ•จ๋˜์–ด,
      • GetPriceInfo() API ๊ฒฐ๊ณผ๋Š” ๋ณธ ๊ฐ€์ด๋“œ์—์„œ ์ œ์•ˆํ•˜๊ณ  ์žˆ๋Š” ํ•˜๋‚˜์˜ json ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.
  • Filter Test Case ๋ฐ ์˜ˆ์ƒ ๊ฒฐ๊ณผ(์˜ˆ์ƒ ๊ฒฐ๊ณผ๋Š” CSP๋ณ„๋กœ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, CSP๋ณ„๋กœ ๊ฐœ๋ณ„ ๊ฒ€์ฆ์ด ํ•„์š”)
    • Driver ๋ฐฐํฌ ์ „ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ตœ์†Œ 6 ์ข…๋ฅ˜์˜ Filter Test ์ž์ฒด ๊ฒ€์ฆ ํ•„์š”

      • CSP๋ณ„๋กœ filter ์กฐ๊ฑด์ด ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, filter ๊ฒฐ๊ณผ๋กœ ํฌํ•จ๋˜๋Š” ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ… ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ
    • (1) filter๊ฐ€ nil ์ผ๋•Œ: ์ „์ฒด ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ… ํฌํ•จํ•œ ์ถœ๋ ฅ

      • ex) handler.GetPriceInfo(productFamily, regionName, nil)
    • (2) filter๊ฐ€ Empty Array ์ผ๋•Œ: ์ „์ฒด ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ… ํฌํ•จํ•œ ์ถœ๋ ฅ (nil์ผ ๊ฒฝ์šฐ์™€ ๋™์ผ)

      • ex) handler.GetPriceInfo(productFamily, regionName, []irs.KeyValue{})
    • (3) productId key์™€ value ์„ค์ •: Key-Value ๊ฐ’๊ณผ ๋™์ผํ•œ field๋ฅผ ํฌํ•จํ•˜๋Š” ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•œ ์ถœ๋ ฅ

      • ex) handler.GetPriceInfo(productFamily, regionName, []irs.KeyValue{{Key: "productId", Value: "mock.enhnace1.mercury"}})
    • (4) product ์ •๋ณด์™€ ๊ด€๋ จ๋œ key์™€ value ์„ค์ •: Key-Value ๊ฐ’๊ณผ ๋™์ผํ•œ field๋ฅผ ํฌํ•จํ•˜๋Š” ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•œ ์ถœ๋ ฅ

      • ex) handler.GetPriceInfo(productFamily, regionName, []irs.KeyValue{{Key: "vcpu", Value: "8"}})
    • (5) ์กด์žฌํ•˜์ง€ ์•Š๋Š” key ์„ค์ •: ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋นˆ cloudPriceList๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฐ๊ณผ ์ถœ๋ ฅ

      • ex) handler.GetPriceInfo(productFamily, regionName, []irs.KeyValue{{Key: "noField", Value: "mock.enhnace1.mercury"}})
    • (6) price policy key์™€ value ์„ค์ •: Key-Value ๊ฐ’๊ณผ ๋™์ผํ•œ ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•œ ์ถœ๋ ฅ

      • ex) handler.GetPriceInfo(productFamily, regionName, []irs.KeyValue{{Key: "pricingPolicy", Value: "OnDemand"}})
    • (7) lease contract length key์™€ value ์„ค์ •: Key-Value ๊ฐ’๊ณผ ๋™์ผํ•œ ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•œ ์ถœ๋ ฅ

      • ex) handler.GetPriceInfo(productFamily, regionName, []irs.KeyValue{{Key: "LeaseContractLength", Value: "1 Year"}})

[Price Info Mock Driver ์ฐธ๊ณ ] Json Struct ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ/๋ณ€ํ™˜ ๋“ฑ ์˜ˆ์‹œ

  • PriceInfo Driver Interface์— ํฌํ•จ๋œ Go Struct์„ ํ™œ์šฉํ•œ Price Info ๋ณ€ํ™˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

  • ์‹ค์ œ CSP ๋“œ๋ผ์ด๋ฒ„๋Š” ํ›จ์”ฌ ๋ณต์žกํ•˜๊ณ  ์ด์Šˆ๊ฐ€ ๋งŽ๊ฒ ์ง€๋งŒ, ํ•„์š”์‹œ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ ๋˜๋Š” ์ฒ˜๋ฆฌ ๊ธฐ์ค€ ์ •๋„๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  • Mock ๋“œ๋ผ์ด๋ฒ„์—์„œ๋Š” ์ œํ’ˆ ๋ฐ ๊ฐ€๊ฒฉ ์ •๋ณด๋ฅผ ๋‹ค์Œ ์œ„์น˜์— file๋กœ ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์—๋ฎฌ๋ ˆ์ด์…˜ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์œ„ ํŒŒ์ผ ์ •๋ณด๋ฅผ CSP์˜ raw ๊ฐ€๊ฒฉ ์ •๋ณด์ฒ˜๋Ÿผ ํ™œ์šฉํ•ด์„œ Spider Price Info(Global view json)๋กœ ๋งตํ•‘(๋ณ€ํ™˜)ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ฃผ์š” ๋งตํ•‘ ๋ฐฉ๋ฒ•:

      • (1) Mock CSP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€๊ฒฉ ์ •๋ณด์˜ Json ๊ตฌ์กฐ(Local view)๋ฅผ local Go struct์œผ๋กœ ํŒŒ์‹ฑ(Json ๊ตฌ์กฐ์˜ Object-tree ํ˜•ํƒœ)
      • (2) (1)์˜ ํŒŒ์‹ฑ๋œ ๊ฐ์ฒด ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ Spider Price info Json ๊ตฌ์กฐ(Global view)๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” global Go struct(Driver interface์— ํฌํ•จ) ๊ฐ์ฒด ํŠธ๋ฆฌ๋กœ ๋งตํ•‘/๋ณ€ํ™˜
      • (3) (2) ๊ณผ์ •์—์„œ ๋งตํ•‘/๋ณ€ํ™˜์€ product ๋ฐ pricePolicy ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ ๋˜๋ฉฐ, ๊ฐ ๋‹จ์œ„ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์œ ํšจํ•œ filter ์ •๋ณด๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ,
        • filter๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ˜„์žฌ ์ฒ˜๋ฆฌ ์ค‘์ธ product ๋ฐ pricePolicy๋ฅผ
        • (2)์˜ global Go struct ๊ฐ์ฒด ํŠธ๋ฆฌ(์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ€ ๋ )์˜ cloudPriceList.priceList์— ์ถ”๊ฐ€
      • product ๋ฐ pricePolicy ๋งตํ•‘์ด ์™„๋ฃŒ๋œ ํ›„ ์ตœ์ข…์ ์œผ๋กœ๋Š” global Go struct ๊ฐ์ฒด ํŠธ๋ฆฌ๋กœ ๋ถ€ํ„ฐ ์ „์ฒด json string ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        • ์ฝ”๋“œ๋‚ด ๋‹ค์Œ ๋ถ€๋ถ„ ์ฐธ๊ณ : globalJsonData, err := json.MarshalIndent(gPriceInfo, "", " ")
      • ์‹ค์ œ๋กœ๋Š” ์ข€๋” ๋ณต์žกํ•˜์ง€๋งŒ, ๋ชจ๋“  ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€๋Š” ์•Š๋„ค์š”.โ˜บ๏ธŽ
    • ์„ธ๋ถ€ ๋‚ด์šฉ: Price Info Driver GetPriceInfo() ๊ตฌํ˜„ ๋ถ€๋ถ„ ์ฐธ๊ณ 

[CB-Spider Price Info Rest API ํ™œ์šฉ ์ฐธ๊ณ ]

  • REST API ๊ทœ๊ฒฉ: CCTM v0.8.2
  • curl ํ™œ์šฉ ์˜ˆ์‹œ
    • List ProductFamily

      curl -sX GET "http://localhost:1024/spider/productfamily/mercury?ConnectionName=mock-config-01" | json_pp
      
      {
         "productfamily" : [
            "Compute Instance",
            "Storage",
            "Network Load Balancer"
         ]
      }
      
    • Get PriceInfo (no Filter)

      curl -sX GET "http://localhost:1024/spider/priceinfo/Compute%20Instance/mercury?ConnectionName=mock-config-01" | jq -r
      
      {
        "meta": {
          "version": "v0.1",
          "description": "Multi-Cloud Price Info"
        },
        "cloudPriceList": [
          {
            "cloudName": "Mock",
            "priceList": [
              {
                "productInfo": {
                  "productId": "mock.enhnace1.mercury",
                  "regionName": "mercury",
                  "zoneName": "NA",
                  "instanceType": "mock.enhnace1",
                  "vcpu": "8",
      
                  ... ์ค‘๋žต ...
      
    • Get PriceInfo (W/ Filter)

      curl -sX GET "http://localhost:1024/spider/priceinfo/Compute%20Instance/mercury?ConnectionName=mock-config-01" \
         -H 'Content-Type: application/json' \
         -d '{
            "FilterList": [{"Key":"vcpu", "Value":"8"}
            ]
          }' \
         | jq -r
      
      {
        "meta": {
          "version": "v0.1",
          "description": "Multi-Cloud Price Info"
        },
        "cloudPriceList": [
          {
            "cloudName": "Mock",
            "priceList": [
              {
                "productInfo": {
                  "productId": "mock.enhnace1.mercury",
                  "regionName": "mercury",
                  "zoneName": "NA",
                  "instanceType": "mock.enhnace1",
                  "vcpu": "8",
      
                  ... ์ค‘๋žต ...
      
  • ์œ„ Filter Test Case์— ๋Œ€ํ•œ curl Test ์˜ˆ์‹œ(๊ฒฐ๊ณผ ์ƒ๋žต)
    • (1) filter๊ฐ€ nil ์ผ๋•Œ: ์ „์ฒด ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ… ํฌํ•จํ•œ ์ถœ๋ ฅ

    • (2) filter๊ฐ€ Empty Array ์ผ๋•Œ: ์ „์ฒด ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ… ํฌํ•จํ•œ ์ถœ๋ ฅ (nil์ผ ๊ฒฝ์šฐ์™€ ๋™์ผ)

    • => (1), (2) Case๋Š” no Filter ์š”์ฒญ ์‹œํ—˜

      curl -sX GET "http://localhost:1024/spider/priceinfo/Compute%20Instance/mercury?ConnectionName=mock-config-01" | jq -r
      
    • (3) productId key์™€ value ์„ค์ •: Key-Value ๊ฐ’๊ณผ ๋™์ผํ•œ field๋ฅผ ํฌํ•จํ•˜๋Š” ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•œ ์ถœ๋ ฅ

      curl -sX GET "http://localhost:1024/spider/priceinfo/Compute%20Instance/mercury?ConnectionName=mock-config-01" \
           -H 'Content-Type: application/json' \
           -d '{
                 "FilterList": [
                   {"Key":"productId", "Value":"mock.enhnace1.mercury"}
                 ]
               }' \
           | jq -r
      
    • (4) product ์ •๋ณด์™€ ๊ด€๋ จ๋œ key์™€ value ์„ค์ •: Key-Value ๊ฐ’๊ณผ ๋™์ผํ•œ field๋ฅผ ํฌํ•จํ•˜๋Š” ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•œ ์ถœ๋ ฅ

      curl -sX GET "http://localhost:1024/spider/priceinfo/Compute%20Instance/mercury?ConnectionName=mock-config-01" \
           -H 'Content-Type: application/json' \
           -d '{
              "FilterList": [{"Key":"vcpu", "Value":"8"}
              ]
            }' \
           | jq -r
      
    • (5) ์กด์žฌํ•˜์ง€ ์•Š๋Š” key ์„ค์ •: ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋นˆ cloudPriceList๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฐ๊ณผ ์ถœ๋ ฅ

      curl -sX GET "http://localhost:1024/spider/priceinfo/Compute%20Instance/mercury?ConnectionName=mock-config-01" \
           -H 'Content-Type: application/json' \
           -d '{
              "FilterList": [{"Key":"noField", "Value":"mock.enhnace1.mercury"}
              ]
            }' \
           | jq -r
      
    • (6) price policy key์™€ value ์„ค์ •: Key-Value ๊ฐ’๊ณผ ๋™์ผํ•œ ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•œ ์ถœ๋ ฅ

      curl -sX GET "http://localhost:1024/spider/priceinfo/Compute%20Instance/mercury?ConnectionName=mock-config-01" \
           -H 'Content-Type: application/json' \
           -d '{
              "FilterList": [{"Key":"pricingPolicy", "Value":"OnDemand"}
              ]
            }' \
           | jq -r
      
    • (7) lease contract length key์™€ value ์„ค์ •: Key-Value ๊ฐ’๊ณผ ๋™์ผํ•œ ์ œํ’ˆ/๊ฐ€๊ฒฉ์ •์ฑ…์„ ํฌํ•จํ•œ ์ถœ๋ ฅ

      curl -sX GET "http://localhost:1024/spider/priceinfo/Compute%20Instance/mercury?ConnectionName=mock-config-01" \
           -H 'Content-Type: application/json' \
           -d '{
              "FilterList": [{"Key":"LeaseContractLength", "Value":"1 Year"}
              ]
            }' \
           | jq -r