-
NCP에는 API통신을 통한 기능을 제공한다.
단순 UI나 콘솔상에서 가능한 것보다 많은 것을 지원하는데, 해당하는 항목에 대해서는 아래를 참고
https://api-gov.ncloud-docs.com/docs/api-overview
아무튼 API를 잘 활용한다면 콘솔 그 이상의 것도 가능하다.
가령 CDB의 경우 백업을 주기적으로 실행 가능하고, OBJ또한 다른 리전으로 주기적 복제가 가능하지만 CDB -> OBJ는 주기적으로 불가능하다.
이럴떄 Bastion 서버등에 CDB->OBJ API를 주기적(cron)으로 등록해 놓는다면 자동으로 OBJ 백업이 되는 효과등을 누릴 수 있다.
하지만 쉽게는 불가능하고, API 가이드에 나와있지만 이해가 안가는 부분도 존재하다.
그에 대부분의 Linux의 기본으로 설치되는 Python으로 API 기본 코드를 공유한다.
import sys import os import hashlib import hmac import base64 import requests import time import json # API server information api_server = "https://cw.apigw.gov-ntruss.com" api_uri = "/cw_server/real/api/plugin/process/add" # Ncloud API Key settings ncloud_accesskey = "" ncloud_secretkey = "" # Unix timestamp setting timestamp = int(time.time() * 1000) timestamp = str(timestamp) def make_signature(): access_key = ncloud_accesskey # Replace with your actual access key secret_key = ncloud_secretkey secret_key = bytes(secret_key, 'UTF-8') method = "POST" uri = api_uri message = method + " " + uri + "\n" + timestamp + "\n" + access_key message = bytes(message, 'UTF-8') signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest()) return signingKey # HTTP headers http_header = { 'x-ncp-apigw-timestamp': timestamp, 'x-ncp-iam-access-key': ncloud_accesskey, 'x-ncp-apigw-signature-v2': make_signature(), 'Content-Type': 'application/json', 'x-ncp-dmn_cd': 'GOV', 'x-ncp-region_code': 'KR' } # Payload payload = { "configList": ["*nginx*"], "instanceNo": "", "type": "VPCServer" } # API call try: response = requests.post(api_server + api_uri, headers=http_header, data=json.dumps(payload)) response.raise_for_status() # Raise exception for HTTP errors print(response.text) except requests.exceptions.RequestException as e: print("HTTP 요청 오류:", e)
위의 예시는 post이며, API는 api_url 과 같다.
여기서 사용자의 입맞에 맞는 API로 변경하면 되는데 변경법은 아래와 같다.
1. 사용할 API를 확인한다.
2. 해당 API의 url 주소를 확인한다.
예를 들어 clusters(클러스터 생성) API 사용한다고 가정한다.
https://api-gov.ncloud-docs.com/docs/nks-createcluster
위의 링크에서 "개요"로 접속하여 API URL 공통 설정과 요청 헤더를 확인한다.
확인하였다면 이제는 API를 확인한다.
친절하게 예시까지 잘 나와있다.
얻을 수 있는 정보는 요청 헤더값과 API 요청형식(get)이다.
이제 위의 API 스크립트를 수정하면 된다.
#api_server = "https://cw.apigw.gov-ntruss.com" #api_uri = "/cw_server/real/api/plugin/process/add" #API 공식 홈페이지를 참고하여 수정 api_server = "https://nks.apigw.gov-ntruss.com/vnks/v2" api_uri = "/clusters"
이렇게 수정하고, API 형식도 필요하다면 수정한다.
예시와 동일한 post이기에 건들일 필요 없지만, 만약 get이거나 Body값이 필요 없다면 아래처럼 수정한다.
#response = requests.post(api_server + api_uri, headers=http_header, data=json.dumps(payload)) # response.raise_for_status() # Raise exception for HTTP errors # print(response.text) #except requests.exceptions.RequestException as e: # print("HTTP 요청 오류:", e) #Body 값이 필요없으니 삭제, get요청이니 post에서 get으로 변경 response = requests.get(api_server + api_uri, headers=http_header) response.raise_for_status() # Raise exception for HTTP errors print(response.text) except requests.exceptions.RequestException as e: print("HTTP 요청 오류:", e)
하지만 clusters에서는 필요하니 그대로 두고, Body 값만 수정하면 끝!
# Payload #payload = { # "configList": ["*nginx*"], # "instanceNo": "", # "type": "VPCServer" #} # Payload payload = { "name": "ㄴㅁㄷㅀㅁㄶㄴㅁㅎ", "clusterType": "ㅋㅋㅋ", "k8sVersion": "1.27.?", "loginKeyName": "String", "hypervisorCode": "String", "regionCode": "String", "zoneCode": "String", "zoneNo": "Integer", "publicNetwork": "Boolean", "kubeNetworkPlugin": "String", "vpcNo": "Integer", "subnetNoList": [ "Integer" ], "subnetLbNo": "Integer", "lbPrivateSubnetNo": "Integer", "lbPublicSubnetNo": "Integer", "log": { "audit": "Boolean" }, "nodePool": [ { "name": "String", "nodeCount": "Integer", "subnetNo": "Integer", "subnetNoList": [ "Integer" ], "softwareCode": "String", "productCode": "String", "labels": [ { "key": "String", "value": "String" } ], "taints": [ { "key": "String", "value": "String", "effect": "String" } ], "serverSpecCode": "String", "storageSize": "Integer", "serverRoleId": "String" } ] }
마지막으로 헤더값을 추가하면 끝.
직접 적기에는 너무 많지만.... 어떻게 했는지는 감을 잡았을거라 생각한다.
이처럼 NCP API를 작동시키면 된다.
댓글