-
Notifications
You must be signed in to change notification settings - Fork 46
GCP Price Info Driver Development Guide
* GCP Price Info 드라이버 개발관련 이슈 및 추진 현황
- GetPriceInfo() 제공 형상을 위한 적합한 API 부재
- 1개 이상의 API 조합으로 생성/변환으로 가능하지만,
- (이슈-1) 베타 버전 API 활용으로 추후 잠재적 이슈 발생 가능
- (이슈-2) CSP API의 과한 호출 필요 => Call Limit 발생 => worst elapsed time (최소 18분)
- 세부 내용: 다음 MSG 참고
-
1안) 대기중, best, 구글 응답 의존적
-
3안) 추진중, Call Limit/소요시간 이슈 존재
- 구글 응답 결과에 따라 1안)으로 전환 가능성 있음
-
참고: 1안)/2안) 세부 설명
- 더 많은 방법을 제공할 수 있지만, Spider 가격정보 제공과 관련 있는 3가지 방법으로 정리
- (1) SKU 기반 가격 정보 제공 방법
- (2) Cost Estimation, Cost Calculator를 활용한 가격 정보 제공 방법
- (3) 인스턴스 타입(머신 타입) 중심 가격 정보 제공 방법
-
※ (1), (2), (3) 개별 방법으로는 Spider GetPriceInfo() 형상 제공 어려움
- (1) 방법: 타 CSP와 달리 SKU 제품 정보에 인스턴스 관련 정보가 부족
- (2) 방법: 사용할 자원/서비스 단위 입력을 통한 예상 가격을 제공 => 필요한 모든 자원/서비스에 대한 입력 필요, Call Limit 이슈 등
- (3) 방법: Cached 정보 또는 Web Page 형태로 제공 => old 가격 정보 또는 html 파싱이 필요 => 유지보수 이슈 등 리스크 존재
- 관련 현황
- SKU ID에 관련된 Instance type을 얻고자 하는데, 얻기 힘들 다는 이슈 (근래에도 리플이 달리고 있음)
-
[참고: SKU & Cloud SKU]
- API/CLI 등을 통해서 전체 제품/서비스별 가격 정책을 상세하게 제공
- 다만, VM 인스턴스 타입(머신 타입) 정보가 Spider에서 제공하는 수준의 정보가 포함되어 있지 않음
- SKU 기반 가격 정보에 포함된 인스턴스 타입 정보는
resourceGroup
및description
등에 약하게 포함 - 사실, GCP의 경우 인스턴스 타입을 사용자가 생성할 수 있기 때문에 SKU 입장에서는 사전 정의된 인스턴스 타입의 중요도가 크지 않는 듯함
- 대신, 인스턴스 타입 그룹(N1Standard 등)의 CPU, Mem 기준 가격을 제시하고 있음
- 개별 인스턴스 타입(n1-standard-16 )에 대한 가격은 계산으로 얻을 수 있음
[사전 준비]
- API Key 생성: Web Console => API 및 서비스 => 사용자 인증 정보 => + 사용자 인증 정보 만들기 => API Key
- Cloud Billing API Enable 방법 예시
- 다음 링크 실행(project 이름 변경 필요) 후 Enable 설정
- https://console.cloud.google.com/apis/library/cloudbilling.googleapis.com?project=powerkimhub
[활용 예시 및 제공 정보]
- service 목록(serviceId 포함) (관련 API: https://cloud.google.com/billing/docs/reference/rest/v1/services )
$ curl https://cloudbilling.googleapis.com/v1/services?key={your API KEY} # 한번에 전부 제공
{
"services": [
{
"name": "services/0017-8C5E-5B91",
"serviceId": "0017-8C5E-5B91",
"displayName": "OpenLogic CentOS 7.8 (v20200922) - Security Hardened",
"businessEntityName": "businessEntities/GCP"
},
...
- Compute Engine 가격 목록(skus-based) (관련 API: https://cloud.google.com/billing/docs/reference/rest/v1/services.skus/list )
- Compute engine의 경우 serviceId: 6F81-5844-456A
$ curl https://cloudbilling.googleapis.com/v1/services/6F81-5844-456A/skus?key={your API KEY} # Next Page 3번 정도 Call 해야 함(https://...&pageToken=xxx)
{
"skus": [
{
"name": "services/6F81-5844-456A/skus/0006-C9C8-BB6F",
"skuId": "0006-C9C8-BB6F",
"description": "Commitment v1: Memory-optimized Cpu in Phoenix for 1 Year",
"category": {
"serviceDisplayName": "Compute Engine",
"resourceFamily": "Compute",
"resourceGroup": "CPU",
"usageType": "Commit1Yr"
},
"serviceRegions": [
"us-west8"
],
"pricingInfo": [
{
"summary": "",
"pricingExpression": {
"usageUnit": "h",
"displayQuantity": 1,
"tieredRates": [
{
"startUsageAmount": 0,
"unitPrice": {
"currencyCode": "USD",
"units": "0",
"nanos": 20550000
}
}
],
"usageUnitDescription": "hour",
"baseUnit": "s",
"baseUnitDescription": "second",
"baseUnitConversionFactor": 3600
},
"currencyConversionRate": 1,
"effectiveTime": "2024-01-08T08:49:30.488759Z"
}
],
"serviceProviderName": "Google",
"geoTaxonomy": {
"type": "REGIONAL",
"regions": [
"us-west8"
]
}
},
...
- 생략: Call Limit 이슈 등으로 사용하지 않을 것이므로
- GCP Web: html 파싱 및 유지등 리스크가 있음
- 활용하지는 않을 것이지만, 인스턴스 타입 종류 및 가격 정보 제공 기준/검증 등에 활용
- Cached json file 및 GCP Web 등을 통해서 VM 인스턴스 중심의 가격 정책을 제공
- Cached json file: 현재 실기간 가격 제공이 어려움,
[활용 예시 및 제공 정보]
-
VM 인스턴스 타입(머신 타입) 제공 웹 페이지
https://cloud.google.com/compute/docs/machine-resource?hl=ko#standard_machine_types
-
VM 인스턴스 가격 책정 제공 웹페이지
- 드라이버 개발시
Compute Engine
머신 유형별 가격 정보 검증 등으로 참고
https://cloud.google.com/compute/vm-instance-pricing?hl=ko
- 드라이버 개발시
-
Cached json file
-
첫줄 comment를 잘 봐야 함: update 되기 전 사이의 가격은 틀릴 수 있음
- 그럼에도 불구하고, 계속 업데이트하면서 유지 되는 것은 내부에서 또는 특수 그룹에서 계속 활용되는 것으로 추정되며,
- 내부에서도 인스턴스 세부 타입별 가격 정보가 필요한 것을 알수 있음
- 필요성에 대해서는 구글링에서도 보이고 다음 등록된 이슈를 보면, 지속적으로 찾고 있는 상황
-
자원 그룹별로 1년 약정 및 3년 약정 가격 제공
-
제품/서비스에 대한 Region별 OnDemand 가격과 Preemptible 가격 정보 포함
-
활용 방법 및 정보 예시
-
curl https://cloudpricingcalculator.appspot.com/static/data/pricelist.json
{
"comment": "This JSON data is obsolete. Please use https://cloud.google.com/billing/v1/how-tos/catalog-api instead.",
"updated": "3-January-2024",
"version": "v1.75",
"gcp_price_list": {
"CP-ALLOYDB-BACKUP": {
"asia-east1": 0.0001589,
"asia-east2": 0.0001918,
"asia-northeast1": 0.0001753,
"asia-northeast2": 0.0001753,
"asia-northeast3": 0.0001753,
"asia-south1": 0.0001425,
...
- N1 머신 유형 약정 목록 확인 예시
grep N1 pricelist.json |grep YEAR
"CP-COMPUTEENGINE-N1-CUD-1-YEAR-CPU": {
"CP-COMPUTEENGINE-N1-CUD-1-YEAR-RAM": {
"CP-COMPUTEENGINE-N1-CUD-3-YEAR-CPU": {
"CP-COMPUTEENGINE-N1-CUD-3-YEAR-RAM": {
- N1 머신 유형 1년 약정 가격 (3년 약정 가격은 생략)
- CPU 가격 정보 예시
cat pricelist.json |jq '.gcp_price_list."CP-COMPUTEENGINE-N1-CUD-1-YEAR-CPU"'
{
"africa-south1": 0.02604882,
"asia-east1": 0.023059,
"asia-east2": 0.0278655,
"asia-northeast1": 0.025589,
"asia-northeast2": 0.025589,
"asia-northeast3": 0.025589, <=========
"asia-south1": 0.0239186,
...
-
- Memory 가격 정보 예시
cat pricelist.json |jq '.gcp_price_list."CP-COMPUTEENGINE-N1-CUD-1-YEAR-RAM"'
{
"africa-south1": 0.003491052,
"asia-east1": 0.003091,
"asia-east2": 0.0037346,
"asia-northeast1": 0.003414,
"asia-northeast2": 0.003414,
"asia-northeast3": 0.003414, <=========
"asia-south1": 0.003205,
- GCP Web에서 확인
- n1-standard-16 OnDemand 가격 정보 예시
cat pricelist.json |jq '.gcp_price_list."CP-COMPUTEENGINE-VMIMAGE-N1-STANDARD-16"'
{
"asia": 0.88,
"asia-east": 0.88,
"asia-east1": 0.88,
"asia-east2": 1.0634,
"asia-northeast": 0.976,
"asia-northeast1": 0.976,
"asia-northeast2": 0.976,
"asia-northeast3": 0.976, <===========
"asia-south1": 0.9127,
...
- n1-standard-16 Preemptible 가격 예시
cat pricelist.json |jq '.gcp_price_list."CP-COMPUTEENGINE-VMIMAGE-N1-STANDARD-16-PREEMPTIBLE"'
{
"asia": 0.176,
"asia-east": 0.176,
"asia-east1": 0.176,
"asia-east2": 0.2242,
"asia-northeast": 0.212,
"asia-northeast1": 0.212,
"asia-northeast2": 0.212,
"asia-northeast3": 0.212, <==========
"asia-south1": 0.19243,
- GCP Web에서 확인
-
머신 타입 상세 정보
와 위 방법 중(1) SKU 기반 가격 정보 제공 방법
조합/변환하여 활용
['머신 타입 상세 정보' 활용 예시 및 제공 정보]
- getPriceInfo()가 제공하는 제품 정보를 제공하기 위해서
- GCP가 제공하는 머신 타입 상세 정보를 활용
- 본 가이드에서는 편의상 cli를 활용(드라이버 개발시에는 SDK API 활용)
- 편의상 일단 전체 머신 타입을 파일로 받기
gcloud compute machine-types list --format=json > gcloud.compute.machine-types.list-json.json
- Zone별로 제공하는 머신 타입과 관련된 규격 정보를 제공
- 제공 정보 예시
[
{
"accelerators": [
{
"guestAcceleratorCount": 1,
"guestAcceleratorType": "nvidia-tesla-a100"
}
],
"creationTimestamp": "1969-12-31T16:00:00.000-08:00",
"description": "Accelerator Optimized: 1 NVIDIA Tesla A100 GPU, 12 vCPUs, 85GB RAM",
"guestCpus": 12,
"id": "1000012",
"imageSpaceGb": 0,
"isSharedCpu": false,
"kind": "compute#machineType",
"maximumPersistentDisks": 128,
"maximumPersistentDisksSizeGb": "263168",
"memoryMb": 87040,
"name": "a2-highgpu-1g",
"selfLink": "https://www.googleapis.com/compute/v1/projects/powerkimhub/zones/us-central1-a/machineTypes/a2-highgpu-1g",
"zone": "us-central1-a"
},
...
- 참고: 제공하는 머신 타입 종류 (243개)
grep name gcloud.compute.machine-types.list-json.json |sort |uniq
"name": "a2-highgpu-1g",
"name": "a2-highgpu-2g",
"name": "a2-highgpu-4g",
"name": "a2-highgpu-8g",
"name": "a2-megagpu-16g",
- 제공하는 머신 타입 정보는 대상 머신 타입을 제공하는 zone마다 중복 하여 제공
- 참고: 머신 타입이 동일하면, zone 정보를 제외하고 모두 동일한 정보를 제공
cat gcloud.compute.machine-types.list-json.json | jq 'map(select(.name=="n1-standard-1"))'
[
{
"creationTimestamp": "1969-12-31T16:00:00.000-08:00",
"description": "1 vCPU, 3.75 GB RAM",
"guestCpus": 1,
"id": "3001",
"imageSpaceGb": 10,
"isSharedCpu": false,
"kind": "compute#machineType",
"maximumPersistentDisks": 128,
"maximumPersistentDisksSizeGb": "263168",
"memoryMb": 3840,
"name": "n1-standard-1",
"selfLink": "https://www.googleapis.com/compute/v1/projects/powerkimhub/zones/us-central1-a/machineTypes/n1-standard-1",
"zone": "us-central1-a"
},
... 중략
{
"creationTimestamp": "1969-12-31T16:00:00.000-08:00",
"description": "1 vCPU, 3.75 GB RAM",
"guestCpus": 1,
"id": "3001",
"imageSpaceGb": 10,
"isSharedCpu": false,
"kind": "compute#machineType",
"maximumPersistentDisks": 128,
"maximumPersistentDisksSizeGb": "263168",
"memoryMb": 3840,
"name": "n1-standard-1",
"selfLink": "https://www.googleapis.com/compute/v1/projects/powerkimhub/zones/me-west1-c/machineTypes/n1-standard-1",
"zone": "me-west1-c"
}
]
['SKU 기반 가격 정보 제공 방법' 활용 예시 및 가이드]
- 편의상 일단 SKU 가격 정보 파일로 받기
- 편의상 첫 페이지만 받기(next page는 생략)
curl https://cloudbilling.googleapis.com/v1/services/6F81-5844-456A/skus?key={your API KEY} > get_https.cloudbilling.googleapis.com-v1-services-6F81-5844-456A-skus.json
- 제품/서비스의 모든 SKU에 대한 가격 정보를 제공
-
Compute Engine
정보의 경우 머신 타입에 대해서 원하는 정도의 세부 정보는 제공하지 않음(제안 해주신 내용과 같이 위 정보 활용 필요) - 대략 제공 내용
$ head -n 50 get_https.cloudbilling.googleapis.com-v1-services-6F81-5844-456A-skus.json
{
"skus": [
{
"name": "services/6F81-5844-456A/skus/0006-C9C8-BB6F",
"skuId": "0006-C9C8-BB6F",
"description": "Commitment v1: Memory-optimized Cpu in Phoenix for 1 Year",
"category": {
"serviceDisplayName": "Compute Engine",
"resourceFamily": "Compute",
"resourceGroup": "CPU",
"usageType": "Commit1Yr"
},
"serviceRegions": [
"us-west8"
],
"pricingInfo": [
{
"summary": "",
"pricingExpression": {
"usageUnit": "h",
"displayQuantity": 1,
"tieredRates": [
{
"startUsageAmount": 0,
"unitPrice": {
"currencyCode": "USD",
"units": "0",
"nanos": 20550000
}
}
],
"usageUnitDescription": "hour",
"baseUnit": "s",
"baseUnitDescription": "second",
"baseUnitConversionFactor": 3600
},
"currencyConversionRate": 1,
"effectiveTime": "2024-01-07T21:00:52.562729Z"
}
],
"serviceProviderName": "Google",
"geoTaxonomy": {
"type": "REGIONAL",
"regions": [
"us-west8"
]
}
},
...
- 특정 SKU에 대해 원본 json 구조 정보로 확인 방법
cat get_https.cloudbilling.googleapis.com-v1-services-6F81-5844-456A-skus.json |jq '.skus' |jq 'map(select(.skuId=="0006-C9C8-BB6F"))'
[
{
"name": "services/6F81-5844-456A/skus/0006-C9C8-BB6F",
"skuId": "0006-C9C8-BB6F",
"description": "Commitment v1: Memory-optimized Cpu in Phoenix for 1 Year",
"category": {
"serviceDisplayName": "Compute Engine",
"resourceFamily": "Compute",
"resourceGroup": "CPU",
"usageType": "Commit1Yr"
},
"serviceRegions": [
"us-west8"
],
"pricingInfo": [
{
"summary": "",
"pricingExpression": {
"usageUnit": "h",
"displayQuantity": 1,
"tieredRates": [
{
"startUsageAmount": 0,
"unitPrice": {
"currencyCode": "USD",
"units": "0",
"nanos": 20550000
}
}
],
"usageUnitDescription": "hour",
"baseUnit": "s",
"baseUnitDescription": "second",
"baseUnitConversionFactor": 3600
},
"currencyConversionRate": 1,
"effectiveTime": "2024-01-07T21:00:52.562729Z"
}
],
"serviceProviderName": "Google",
"geoTaxonomy": {
"type": "REGIONAL",
"regions": [
"us-west8"
]
}
}
]
- 제공하는 가격 정책 종류
cat get_https.cloudbilling.googleapis.com-v1-services-6F81-5844-456A-skus.json |grep usageType |sort |uniq
"usageType": "Commit1Yr"
"usageType": "Commit3Yr"
"usageType": "OnDemand"
"usageType": "Preemptible"
- 제공하는 정보 중 제품/서비스 관련 정보
- 다음에 표시된 정보들
- **즉, 이 정보를 이용해서 VM 인스턴스 타입 정보와 맵핑 해야 함 ** <------------------------------------------
- skuId를 이용해서 인스턴스 타입 정보를 얻으면 좋은데, 그런 API는 없는 듯함(구글링: 찾는 사람들은 종종 있음)
- API가 존재해도, skuId과 머신 타입 정보가 전체 sku에 대해서 한번 내지 몇번의 API Call로 얻을 수 있어야 함(Call Limit 이슈 관련)
{
"name": "services/6F81-5844-456A/skus/0006-C9C8-BB6F",
"skuId": "0006-C9C8-BB6F",
"description": "Commitment v1: Memory-optimized Cpu in Phoenix for 1 Year", <---------- description이므로, 가능하면 보조 정보로만 활용
"category": {
"serviceDisplayName": "Compute Engine", <------ sku 정보 요청시 "6F81-5844-456A" 인자로 얻었기 때문에 현재 얻은 정보는 모두 동일한 값
"resourceFamily": "Compute", <-------- 아래 resourceFamily 종류 참고, productFamily 종류 filtering에 활용 가능
"resourceGroup": "CPU", <-------- 이 정보가 일부 머신 타입을 구분할 수 있는 정보로 활용 가능, 아래 resoruceGroup 정보 관련 내용 참고
"usageType": "Commit1Yr" <-------- (Commit1Yr, Commit3Yr, OnDemand, Preemptible)가격 정책 종류 정보로 활용 가능
},
"serviceRegions": [
"us-west8" <-------- 제공하는 리전 정보로 활용 가능
],
"pricingInfo": ... <-------- 가격 정책으로 활용 가능
- 제공하는 resourceFamily 종류
cat get_https.cloudbilling.googleapis.com-v1-services-6F81-5844-456A-skus.json |grep resourceFamily |sort |uniq
"resourceFamily": "Compute",
"resourceFamily": "License",
"resourceFamily": "Network",
"resourceFamily": "Storage",
- 제공하는 resourceGroup 종류
cat get_https.cloudbilling.googleapis.com-v1-services-6F81-5844-456A-skus.json |grep resource
Group |sort |uniq
"resourceGroup": "AdvancedNetworking",
"resourceGroup": "AlmaLinux",
"resourceGroup": "AppScale",
"resourceGroup": "BitnamiAlchemy",
"resourceGroup": "BitnamiCanvas",
"resourceGroup": "BitnamiCloud9",
"resourceGroup": "BitnamiDevPack",
"resourceGroup": "BitnamiGallery",
"resourceGroup": "BitnamiGerrit",
"resourceGroup": "BitnamiMeteor",
"resourceGroup": "BitnamiNexus",
"resourceGroup": "BitnamiNodeBB",
"resourceGroup": "BitnamiPHP7",
"resourceGroup": "BitnamiRadiant",
"resourceGroup": "BitnamiReportServer",
"resourceGroup": "BitnamiWebPack",
"resourceGroup": "CDNCacheFill",
"resourceGroup": "CPU",
"resourceGroup": "Canonical",
"resourceGroup": "CentOS",
"resourceGroup": "CloudEndure",
"resourceGroup": "ConfidentialSpace",
"resourceGroup": "CoreOSBeta",
"resourceGroup": "CoreOSStable",
"resourceGroup": "Couchbase",
"resourceGroup": "DaceITLLCd/b/aSenseTrafficPulse",
"resourceGroup": "DataflowStreaming",
"resourceGroup": "Debian",
"resourceGroup": "Debian8",
"resourceGroup": "Debian9",
"resourceGroup": "Dokku",
"resourceGroup": "F1Micro",
"resourceGroup": "FedoraCoreOS",
"resourceGroup": "Flink",
"resourceGroup": "FreeBSD",
"resourceGroup": "G1Small",
"resourceGroup": "GPU",
"resourceGroup": "Google",
"resourceGroup": "GoogleEgress",
"resourceGroup": "GoogleIngress",
"resourceGroup": "GreenSQL",
"resourceGroup": "InterconnectAttachment",
"resourceGroup": "InterconnectPort",
"resourceGroup": "InterregionEgress",
"resourceGroup": "InterregionIngress",
"resourceGroup": "IntrazoneEgress",
"resourceGroup": "IpAddress",
"resourceGroup": "LocalSSD",
"resourceGroup": "MachineImage",
"resourceGroup": "MasterConcept",
"resourceGroup": "Microsoft",
"resourceGroup": "N1Standard",
"resourceGroup": "Nuggeta",
"resourceGroup": "OpenSUSELeap42",
"resourceGroup": "PDSnapshot",
"resourceGroup": "PDStandard",
"resourceGroup": "PacketMirroring",
"resourceGroup": "PdSnapshotEgress",
"resourceGroup": "PeeringOrInterconnectEgress",
"resourceGroup": "PeeringOrInterconnectIngress",
"resourceGroup": "PremiumInternetEgress",
"resourceGroup": "PremiumInternetIngress",
"resourceGroup": "Quobyte",
"resourceGroup": "RAM",
"resourceGroup": "RHEL6",
"resourceGroup": "RedHat",
"resourceGroup": "Rhel",
"resourceGroup": "Ruby",
"resourceGroup": "SLES12ForSAP",
"resourceGroup": "SQLServer2014Web",
"resourceGroup": "SQLServer2016Express",
"resourceGroup": "SQLServer2016Standard",
"resourceGroup": "SSD",
"resourceGroup": "SUSE",
"resourceGroup": "SUSE11",
"resourceGroup": "SUSE12",
"resourceGroup": "Sles",
"resourceGroup": "SlesSap",
"resourceGroup": "StandardInternetEgress",
"resourceGroup": "StandardInternetIngress",
"resourceGroup": "StorReduceLarge",
"resourceGroup": "StorReduceXLarge",
"resourceGroup": "Storage",
"resourceGroup": "StorageImage",
"resourceGroup": "TPU",
"resourceGroup": "Ubuntu1204LTS",
"resourceGroup": "Ubuntu1404LTS",
"resourceGroup": "Ubuntu1604",
"resourceGroup": "Ubuntu1610",
"resourceGroup": "Ubuntu1710",
"resourceGroup": "UbuntuCore",
"resourceGroup": "UbuntuCore16",
"resourceGroup": "UbuntuDev",
"resourceGroup": "UbuntuSnappy1604",
"resourceGroup": "VPNInternetEgress",
"resourceGroup": "VPNInternetIngress",
"resourceGroup": "VPNInterregionEgress",
"resourceGroup": "VPNInterregionIngress",
"resourceGroup": "VarnishSoftwareInc",
"resourceGroup": "VmState",
"resourceGroup": "Windows2008",
"resourceGroup": "Windows2016",
"resourceGroup": "WindowsActiveDirectory",
"resourceGroup": "WindowsCore",
"resourceGroup": "WindowsServer2008R2",
"resourceGroup": "WindowsServer2012",
"resourceGroup": "WindowsServer2012R2",
- resourceGroup 정보와 N1 머신 유형 맵핑 가이드
- N1 관련 정보 얻는 방법(resourceGroup="N1Standard") 및 그중 첫번째 정보 확인
cat get_https.cloudbilling.googleapis.com-v1-services-6F81-5844-456A-skus.json |jq '.skus' |jq 'map(select(.category.resourceGroup=="N1Standard"))' |more
[
{
"name": "services/6F81-5844-456A/skus/000F-E31B-1D6F",
"skuId": "000F-E31B-1D6F",
"description": "N1 Predefined Instance Ram running in Zurich", <---------------- 'Ram': 메모리 가격 정보 임을 참고
"category": {
"serviceDisplayName": "Compute Engine",
"resourceFamily": "Compute",
"resourceGroup": "N1Standard", <---------------- N1 계열
"usageType": "OnDemand" <---------------- 가격 정책
},
"serviceRegions": [
"europe-west6" <--------------- 리전
],
"pricingInfo": [
{
"summary": "",
"pricingExpression": {
"usageUnit": "GiBy.h", <--------------- 메모리 가격 정보임을 활용 가능
"displayQuantity": 1,
"tieredRates": [
{
"startUsageAmount": 0,
"unitPrice": {
"currencyCode": "USD",
"units": "0",
"nanos": 5928000 <--------------- 가격 정보 활용 가능, dollar 변환 규칙은 여기서(https://cloud.google.com/skus/?hl=ko) 확인 가능
} skuid(ex:000F-E31B-1D6F)를 입력하면 환산하여 보여줌
}
],
"usageUnitDescription": "gibibyte hour",
"baseUnit": "By.s",
"baseUnitDescription": "byte second",
"baseUnitConversionFactor": 3865470566400
},
"currencyConversionRate": 1,
"effectiveTime": "2024-01-07T21:00:52.562729Z"
}
],
"serviceProviderName": "Google",
"geoTaxonomy": {
"type": "REGIONAL",
"regions": [
"europe-west6"
]
}
},
...
- 관련된 웹 페이지에서 정보 확인
- N1 머신 유형, 취리히, OnDemand, 메모리, 시간당 GB 사용 단가
- (resourceGroup="N1Standard") 정보 중 vCPU 관련 정보 예시를 하나 더 보자면,
- services.sku.lisk 제공 정보 예시
{
"name": "services/6F81-5844-456A/skus/718A-81BA-2CBB",
"skuId": "718A-81BA-2CBB",
"description": "N1 Predefined Instance Core running in Zurich", <---------------- 'Core': CPU 정보 임을 참고
"category": {
"serviceDisplayName": "Compute Engine",
"resourceFamily": "Compute",
"resourceGroup": "N1Standard", <---------------- N1 계열
"usageType": "OnDemand" <---------------- 가격 정책
},
"serviceRegions": [
"europe-west6" <---------------- 리전
],
"pricingInfo": [
{
"summary": "",
"pricingExpression": {
"usageUnit": "h", <---------------- vCPU 가격 정보 추정(N1 계열인 경우, 메모리: "GiBy.h")
"displayQuantity": 1,
"tieredRates": [
{
"startUsageAmount": 0,
"unitPrice": {
"currencyCode": "USD",
"units": "0",
"nanos": 44231000 <---------------- 가격 정보: 0.044231 USD per 1 hour
}
}
],
"usageUnitDescription": "hour",
"baseUnit": "s",
"baseUnitDescription": "second",
"baseUnitConversionFactor": 3600
},
"currencyConversionRate": 1,
"effectiveTime": "2024-01-08T08:57:38.057755Z"
}
],
"serviceProviderName": "Google",
"geoTaxonomy": {
"type": "REGIONAL",
"regions": [
"europe-west6"
]
}
},
- Web 페이지 제공 정보 예시
- 편의상 가이드 설명은 services.sku.list API를 사용하지 않고, Web 페이지 정보를 사용하여 설명
- services.sku.list API가 제공하는 정보는 세부 머신 타입 정보(즉, VCPU 1개, Memory 16GB 등의 정보)가 없고,
- 다음과 같이 머신 유형별 CPU 기준 가격과 Memory 기분 가격을 제공
- 세부 머신 타입 가격 정보는 다음과 같이 계산으로 얻을 수 있음
- API로 얻은 가격과 계산으로 얻은 가격이 소숫점 5자리 정도가 다른 경우를 드물게 목격했지만, 거의 동일하였음
- 예시:
n1-highmem-96
선점형 가격 정보 - 확인: 관련 웹페이지 가격 정보
- 위에서 확인한 인스턴스 타입 세부 정보 및 SKU 가격 정보 및 생성한 세부 머신 타입별 가격 정보를 활용하여,
- CB-Spider 가격 정보 추상화 정보 Json을 생성
- 제안 방법은 일부 케이스에 대한 샘플링을 통한 가능성을 타진한 방법입니다.
- 실제 전체를 추진하는 데 문제가 없는 지 머신 유형별 추가 점검이 필요합니다.
- N1 머신 유형은 resourceGroup에 "N1Standard"로 표시되어 이 정보를 활용했지만,
- N1 머신 외에는 "description" 정보에 머신 유형 정보가 포함되어 있습니다.
- 이 description 정보를 기반으로 가격 정보를 추출하는 것이 안정적인지 재점검 등이 필요합니다.
- 예를 들어 C3D 머신 유형의 경우, 다음과 같이 description 정보와 resourceGrop(RAM|CPU) 등으로 해석하는 방법이 필요합니다.
- 다른 머신 유형 들도 대략 점검 후 개발을 시작하는 것이 좋을 듯 합니다.
{
"name": "services/6F81-5844-456A/skus/002F-AF8C-E90F",
"skuId": "002F-AF8C-E90F",
"description": "Spot Preemptible C3D Instance Ram running in Columbus", <------------ 'C3D'
"category": {
"serviceDisplayName": "Compute Engine",
"resourceFamily": "Compute",
"resourceGroup": "RAM", <------------ 메모리 가격
"usageType": "Preemptible"
}, ...
-
기능 개발 마감을 1/17(월) 기준으로 검토해주시면 되겠습니다.
-
공수, 기간 및 난이도 등을 고려했을 때, 위 제안 방법이 비관적일 경우 다음 방법으로 추진 부탁 드립니다.
-
GCP가 제공하는 SKU 정보 체계로 제공
- 즉, serivces.skl.list API 제공 정보만 활용
- 즉, 인스턴스 세부 정보를 제공하지 않고, SKU 중심의 가격 정보 제공으로 변환
-
변환 예시
"productInfo": {
"productId": "2223RRAP6Z3VBN3N", <====== SKU Id
"regionName": "us-east-1", <====== Region 정보
"zoneName": "NA", <====== NA
"instanceType": "c5d.2xlarge", <====== description 정보
"vcpu": "8", <====== NA
"memory": "16 GiB", <====== NA, 이하 제공하지 않는 정보는 NA로 설정
"storage": "1 x 200 NVMe SSD",
"gpu": "2",
"gpuMemory": "NA",
"operatingSystem": "RHEL",
"preInstalledSw": "SQL Web",
"description": "Any helpful information", <====== description 정보
+ "cspProductInfo": { ... } <===== GCP 제공 정보 추가
이하 priceInfo 정보는 가능한 변환해서 채움
- 차이가 나는 정보 예시는 아래를 참고
- 차이가 나는 경우엔 API 가격 정보를 우선 준수한다.
- 웹 페이지나 Cached json file의 경우 실시간 반영이 아니고, 반영 시점에 따라 차이가 나는 것으로 추정
[SKU 가격 정보 차이]
-
us-east4 preemptibla, cpu 가격 정보가 모두 다름
- API 얻은 가격: 0.00668 USD per 1 hour
- 웹페이지 가격: $0.00712085 / vCPU hour
- cached json file: $0.00701
- 참고: Zurich(europe-west6)의 경우는 모두 동일함
-
services.sku.list로 얻은 (resourceGroup="N1Standard") 정보 중 vCPU 관련 가격 정보가 다음과 같음
{
"name": "services/6F81-5844-456A/skus/023F-CB27-DC68",
"skuId": "023F-CB27-DC68",
"description": "Spot Preemptible N1 Predefined Instance Core running in Virginia", <---------------- 'Core': CPU 정보 임을 참고
"category": {
"serviceDisplayName": "Compute Engine",
"resourceFamily": "Compute",
"resourceGroup": "N1Standard", <---------------- N1 계열
"usageType": "Preemptible" <---------------- 가격 정책
},
"serviceRegions": [
"us-east4" <---------------- 리전
],
"pricingInfo": [
{
"summary": "",
"pricingExpression": {
"usageUnit": "h", <---------------- vCPU 가격 정보
"displayQuantity": 1,
"tieredRates": [
{
"startUsageAmount": 0,
"unitPrice": {
"currencyCode": "USD",
"units": "0",
"nanos": 6680000 <---------------- 가격 정보: 0.00668 USD per 1 hour
}
}
],
"usageUnitDescription": "hour",
"baseUnit": "s",
"baseUnitDescription": "second",
"baseUnitConversionFactor": 3600
},
"currencyConversionRate": 1,
"effectiveTime": "2024-01-07T21:00:52.562729Z"
}
],
"serviceProviderName": "Google",
"geoTaxonomy": {
"type": "REGIONAL",
"regions": [
"us-east4"
]
}
},
-
웹 페이지에서 확인하면: $0.00712085 / vCPU hour
-
cached json file에서 확인하면: 0.00701
[SKU 제공 리전 차이]
- service list API로 얻은 정보 중: N1 계열이 "europe-west10(Berlin)"에서 제공하는 걸로 나옴
{
"name": "services/6F81-5844-456A/skus/007F-30EB-9169",
"skuId": "007F-30EB-9169",
"description": "Spot Preemptible N1 Predefined Instance Core running in Berlin", <--------------
"category": {
"serviceDisplayName": "Compute Engine",
"resourceFamily": "Compute",
"resourceGroup": "N1Standard", <-----------------------
"usageType": "Preemptible"
},
"serviceRegions": [
"europe-west10" <-----------------------
],
"pricingInfo": [
... 중략
- Console 상에서 확인해보면, N1 계열은 제공하지 않는 리전으로 나옴
- API 정보가 맞는 것인지, Console 정보가 맞는 것인지, 아니면 opt-in 설정 등의 계정 의존 문제인지 확인이 필요함
- 또한, Web 정보의 경우에는 전체 적으로 "europe-west10" 리전 정보는 제공하고 있지 않음 => 이유는 모르겠지만, 모든 가격 정보를 제공하고 있지 않는 것으로 생각됨. => 드라이버 개발시 절대적인 레퍼런스 정보로 활용할 수 없고, 참고 정보로 활용
-
Install & Start Guide
-
Features & Usage
-
- AdminWeb Tool Guide
- CLI Tool Guide
- REST API Guide
-
Design
-
Developer Guide
-
Cloud Driver Developer Guide
- Cloud Driver Developer Guide-WIP
- VM SSH Key Development Guide-WIP
- VM User Development Guide
- What is the CSP SDK API Version of drivers
- Region Zone Info and Driver API
- Price Info and Driver API
- (StartVM TerminateVM) API Call Counts and Waiting
- StartVM and TerminateVM Main Flow of drivers
- VM Root Disk Configuration Guide
- Security Group Rules and Driver API
- Network Load Balancer and Driver API
- VM Snapshot, MyImage and Disk Overview
- Kubernetes and Driver API(PMKS, K8S)
- Tag and Cloud Driver API
- AnyCall API Extension Guide
-
Test Reports
- v0.2.8-for-espresso-release
- v0.3.0-espresso-release
- Azure:Terminating VM
- cb-user@VM: ssh login, sudo run
- v0.3.14 test for SG Source
- v0.4.0-cafemocha-release
- Test via REST API Gateway
- Test Reports of v0.4.11 (IID2 initial Version)
- Test Reports of v0.4.12 (Register & Unregister existing Resources)
- Test Reports for v0.6.0 Release
- How to ...
- How to provision GPU VMs
- How to Resolve the 'Failed to Connect to Database' Error
- How to test CB Spider with Mock Driver
- How to install CB Spider on WSL2 under 공유기/사설망
- How to install CB Spider on macOS
- How to run CB Spider Container on macOS
- How to install OpenStack on a VM for CB Spider Testing
- How to get Azure available Regions
- How to profile memory usage in Golang
- Deprecated:How to install protoc and plugins
- [For Cloud-Migrator]