안녕하세요
이번 시간에는 Ncloud에서 제공하는 API를 통해 여러 가지 조회 기능을 간편하게 커스텀해보도록 하겠습니다.
1. Ncloud API란?
네이버 클라우드 플랫폼에서 제공하는 서비스와 솔루션을 효과적으로 이용할 수 있도록 API(Application Program Interface, 응용 프로그램 인터페이스)와 SDK(Software Development Kit)를 제공하고 있습니다. 액션에 따라 파라미터 값을 입력하고 등록, 수정, 삭제, 조회 기능을 이용할 수 있으며 서비스와 운영 도구 자동화에도 활용할 수 있습니다. 일반적으로 XML, JSON 형식으로 응답하는 API URL 형태로 크게 기본 API, 호환 API, 연동 API로 구분할 수 있습니다.
Ncloud API에 대한 가이드를 제공해주고 있기 때문에 자세한 내용은 위 Docs를 통해 확인하실 수 있습니다.
2. Ncloud 지원 API 및 SDK
NAVER Cloud Platform API는 Server, Load Balancer, Auto Scaling, Monitoring, Security, GeoLocation, Hash Filter 등의 다양한 기능을 제어할 수 있습니다.
1. API 호출하기
NAVER Cloud Platform API는 RESTful API 방식으로 제공되며, XML와 JSON 형식으로 응답합니다. 액션에 따라 파라미터 값을 입력하고 등록, 수정, 삭제, 조회할 수 있으며, 서비스 및 운영 도구 자동화에 활용할 수 있습니다. HTTP 방식의 GET/POST 메서드 호출을 통해서 사용되며 잘못된 호출 시 오류 코드와 메시지를 리턴합니다. NAVER Cloud Platform API 호출 단계는 다음과 같습니다.
1) 인증키 생성
인증키를 생성할 수 있는 방법을 소개해드리겠습니다.
(1) 인증키 생성하기
다음과 같이 네이버 클라우드 플랫폼 포탈에서 마이페이지 > 인증키 관리 > 신규 API 인증키 생성을 통해 생성할 수 있습니다.
두 번째로 Sub Accounts > 계정 선택 > Access Key > 추가를 통해 API 인증키를 생성할 수 있습니다.
2) 헤더 생성
생성한 인증키를 사용하여 헤더를 생성합니다. 헤더에는 인증과 관련된 파라미터(AUTHPARAMS)가 포함됩니다. 여기에서 설명하는 헤더는 NAVER Cloud Platform API에 속하는 API들의 공통 헤더이며, 서비스별 API의 헤더 구성은 조금씩 상이할 수 있습니다. NAVER Cloud Platform API의 공통 헤더에 대한 설명은 다음과 같습니다.
Header | Description |
x-ncp-apigw-timestamp | - 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타낸 것 - API Gateway 서버와 시간 차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주 |
x-ncp-iam-access-key | - 네이버 클라우드 플랫폼 포털이나 Sub Account에서 발급받은 Access Key ID |
x-ncp-apigw-signature-v2 | - Body를 Access Key ID와 맵핑되는 Secret Key로 암호화한 서명값 - HMAC 암호화 알고리즘은 HmacSHA256 사용 |
이 부분은 API를 호출할 때 공통 헤더에 대한 설명입니다. 인증과 관련된 공통 헤더이기 때문에 뒤에 나오는 코드에서 해당 공통 헤더 부분을 보여드리겠습니다.
3) 호출
import sys
import os
import hashlib
import hmac
import base64
import requests
import time
def make_signature():
timestamp = int(time.time() * 1000)
timestamp = str(timestamp)
access_key = "{accessKey}" # access key id (from portal or Sub Account)
secret_key = "{secretKey}" # secret key (from portal or Sub Account)
secret_key = bytes(secret_key, 'UTF-8')
method = "GET"
uri = "/photos/puppy.jpg?query1=&query2"
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
가이드에서 기본적으로 제공하는 샘플 코드입니다. 해당 코드를 이용하여 API 호출에 필요한 signingKey를 생성하는 코드입니다.
4) 호출 실패 코드
호출에 실패하여 리턴되는 오류 코드에는 서비스 공통 오류 코드와 서비스별 오류 코드가 있습니다. 서비스별 오류 코드는 각 서비스별 API 가이드의 오류 코드를 참고해 주십시오.
3. 해당 코드를 커스텀하여 Ncloud 리소스 조회하기
Ncloud에는 사용하기 편하게 Documentation에 다음과 같이 API와 Method가 정리되어 있습니다.
1. 간단하게 Region, Instance 조회하기
import hashlib
import hmac
import base64
import requests
import time
import json
class NcloudApiClient:
def __init__(self, access_key, secret_key):
self.access_key = access_key
self.secret_key = bytes(secret_key, 'UTF-8')
self.api_server = "https://ncloud.apigw.ntruss.com"
def make_signature(self, uri, method="POST"):
timestamp = str(int(time.time() * 1000))
message = method + " " + uri + "\n" + timestamp + "\n" + self.access_key
message = bytes(message, 'UTF-8')
signingKey = base64.b64encode(hmac.new(self.secret_key, message, digestmod=hashlib.sha256).digest())
api_endpoint = self.api_server + uri
http_header = {
'x-ncp-apigw-signature-v2': signingKey,
'x-ncp-apigw-timestamp': timestamp,
'x-ncp-iam-access-key': self.access_key
}
return api_endpoint, http_header
def get_request(self, uri):
api_endpoint, http_header = self.make_signature(uri, method="GET")
response = requests.get(api_endpoint, headers=http_header)
return json.loads(response.text)
def post_request(self, uri):
api_endpoint, http_header = self.make_signature(uri, method="POST")
response = requests.post(api_endpoint, headers=http_header)
return json.loads(response.text)
def main():
access_key = "Your Access Key" # Ncloud 계정 Access Key
secret_key = "Your Secret Key" # Ncloud 계정 Secret Key
ncloud_api = NcloudApiClient(access_key, secret_key)
input_api = input("Enter Ncloud API: ")
getRequest = ncloud_api.get_request("/server/v2/" + input_api + "?responseFormatType=json")
postRequest = ncloud_api.post_request("/server/v2/" + input_api + "?responseFormatType=json")
print("Get Request Data:", getRequest)
print("Post Request Data:", postRequest)
if __name__ == "__main__":
main()
- NcloudApiClient 클래스를 이용하여 API 호출과 관련된 로직을 캡슐화
- 각각의 API 요청에 대해 'get_request' 및 'post_request' 메서드를 사용하여 코드를 간결하게 정리
- 사용자에게 메서드를 입력받아 손 쉽게 조회
다음과 같이 API 호출 및 관리가 가능하게 커스텀하였습니다.
2. API 호출해보기
사용자에게 API를 입력받아서 Get Request Data/Post Request Data를 출력하는 것을 확인할 수 있습니다. 다음 포스팅에서는 파라미터까지 입력받아 좀 더 다양한 API를 사용해 보는 실습을 진행하겠습니다.
이번 시간에는 Ncloud에서 제공하는 API를 통해 여러 가지 조회 기능을 간편하게 커스텀해서 사용해 보았습니다.
감사합니다.
'Cloud > Naver Cloud' 카테고리의 다른 글
[Ncloud] Rocky Linux 8.8에서 최신 버전의 Nginx 설치하기 (0) | 2024.02.19 |
---|---|
[Ncloud] Cloud Activity Tracer를 알아보고 사용해보기 (0) | 2024.02.19 |
[Ncloud] Security Monitoring의 기능부터 신청까지 자세하게 알아보기 (1) | 2024.02.08 |
[Ncloud] Certificate Manager를 통한 외부 인증서 등록하기 (+WAF 인증서 갱신) (0) | 2024.02.08 |
[NCP] Certificate Manager를 이용해 로드밸런서에 SSL 인증서 적용하기 (2) | 2023.12.26 |
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!