[입 개발] libcloud 로 KT Olleh UCloud Biz 이용하기

해당 블로그는 KT Olleh UCloud Biz의 지원을 받고 있습니다

libcloud는 apache에 있는 multi cloud를 단일 인터페이스로 사용할 수 있도록 하는 Open Source Python Project 입니다.  libcloud를 보면 내부에 여러가지가 있지만, 가장 큰 것 두 가지가 compute 와 storage 입니다. compute 는 IaaS, 즉 아마존 aws의 ec2와 같이 가상 서버를 할당받고 종료하기 위해서 사용하는 프로젝트이고 storage 는 S3 나 OpenStack의 Swift와 같은 object store를 다루기 위한 API입니다.

그런데 갑자기 왜 KT Olleh UCloud Biz를 얘기하는 가 하면 몇일전에 libcloud에 KT UCloud 의 Storage를 사용할 수 있는 패치가 올라왔기 때문입니다. compute 에 대한 부분은 작년 쯤에 패치가 되었는데, storage 쪽이 늦게된 이유는, 게을러서라고 생각합니다.(죄송합니다. 제가 게을러서 T.T), 사실 올 2월에 패치를 한번 냈다가, 까였었습니다. OpenStack Driver 자체를 Refactoring하려고 시도했더니, 수정사항이 너무 많아져서 커미터가 반대를 T.T, 이번에는 그래서 아주 간단한 패치로…KT Ucloud Storage 가 OpenStack Swift 기반이라 Rackspace 에서 cloudfile 드라이버를 구현하면서, 이미 거의 다 만들어나서 숟가락만 살짝 얹은…

그래서 이번에는 libcloud 가 제대로 동작하는지 확인해보고 실제로 KT UCloud를 어떻게 사용하게 되는지 간단한 예제들을 통해서 살펴보도록 하겠습니다.

1. 설치

git clone https://github.com/apache/libcloud.git
python setup.py build
sudo python setup.py install

2. Compute Driver 사용

from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
from config import Config

ktucloud = get_driver(Provider.KTUCLOUD)

driver = ktucloud(Config.APIKEY, Config.SECRETKEY,
                  path='/server/v1/client/api', host='api.ucloudbiz.olleh.com')

nodes = driver.list_nodes()
sizes = driver.list_sizes()
images = driver.list_images()

print sizes[0]
print images[0]
driver.create_node("libcloud", sizes[0], images[0])

위의 예제를 실행하면, 해당 size와 image 에 맞는 인스턴스가 생성되는 것을 볼 수 있습니다.

libcloud

두 번째는 kt ucloud storage 드라이버의 사용방법입니다. KT UCloud Storage의 경우, compute driver 와는 또 키가 다릅니다. ucloud storage->API Key 관리에서 id와 secret key를 확인할 수 있습니다.

from pprint import pprint

from libcloud.storage.types import Provider
from libcloud.storage.providers import get_driver
from config import Config

CloudFiles = get_driver(Provider.KTUCLOUD)

driver = CloudFiles(Config.STORAGE_API_ID, Config.STORAGE_API_SECRET)

containers = driver.list_containers()
container_objects = driver.list_container_objects(containers[0])

pprint(containers)
pprint(container_objects)

사실 기존에는 Compute Driver 만 지원되고 Storage Driver 가 지원되지 않아서 libcloud에서 사용하는건 반쪽이었지만, 지금은, 그래도 libcloud를
사용해서 Multi Cloud를 이용할 수 있을꺼라고 생각합니다.