23
OpenStack API 吉山あきら [email protected]

OpenStack API

  • Upload
    yosshy

  • View
    4.704

  • Download
    1

Embed Size (px)

DESCRIPTION

OSS推進フォーラム 若手勉強会 2012/10/26 の資料です。

Citation preview

Page 1: OpenStack API

OpenStack API

吉山あきら[email protected]

Page 2: OpenStack API

目次

● OpenStack 各コンポーネントの API● OpenStack API● OpenStack クライアントライブラリ

Page 3: OpenStack API

OpenStack 各コンポーネントの API

Page 4: OpenStack API

Nova の API

標準装備の API● OpenStack Compute API (v2)● Amazon EC2 互換 API ※Grizzly リリースで廃止予定

● Amazon EC2 互換 Metadata API● OpenStack Volume API (v1) ※Grizzly リリースで廃止予定

サードパーティ API● Cloud Infrastructure Management Interface ( CIMI )

– https://github.com/osaddon/cimi/

● Open Cloud Computing Interface (OCCI)– https://github.com/tmetsch/occi-os

Page 5: OpenStack API

Swift の API

標準装備の API● OpenStack Object Storage API (v2.0)

サードパーティ API● Amazon S3 互換 API

– https://github.com/fujita/swift3● Cloud Data Management Interface (CDMI)

– https://github.com/osaddon/cdmi

Page 6: OpenStack API

その他のコンポーネントの API

Glance● OpenStack Image API (v1.1)

Keystone● OpenStack Identity API (v2.0)

Quantum● OpenStack Networking API (v2.0)

Cinder● OpenStack Volume API (v1.0)

※Nova の Volume API と同一

Page 7: OpenStack API

OpenStack API

Page 8: OpenStack API

OpenStack API 登場以前

Nova は当初 Amazon EC2 互換 API のみ● 標準 CLI は Eualyptus 用の Euca2ools

独自の機能拡張をする際、 EC2 互換 API では…● クライアントツールを改造/独自開発する必要がある● 結果的に API の互換性が低下する

OpenStack プロジェクトで自由に拡張可能なRESTful API を開発する事にした

Page 9: OpenStack API

OpenStack API

● Rackspace のクラウドサービス API を参考● 比較的素直な RESTful API

リソースの create/read/update/delete が基本

● ユーザ認証とサービス操作で別の URL を使用● ユーザ認証… Keystone サービス API の URL● サービス操作… Keystone から返されたエンドポイント URL

Page 10: OpenStack API

OpenStack API のユーザ認証

Keystone

Nova 等

① ユーザ名、→パスワード

←② エンドポイント、トークン

サービス API( 5000/TCP )

Page 11: OpenStack API

OpenStack API のサービス操作

Keystone

Nova 等

③ →トークン、操作

④ ↑トークン

↓⑤ ロール

←⑥ 操作結果

管理 API( 35357/TCP )

OpenStack Compute API( 8774/TCP )

Page 12: OpenStack API

エンドポイントとトークン

エンドポイント

各種 OpenStack API の URL(全コンポーネントの URL が一度に提供される)

トークン

各種 OpenStack API のユーザ認証でユーザ名・パスワードの代わりに使用する文字列– 有効期限がある– HTTP のセッションクッキーと同様

Page 13: OpenStack API

参考: Amazon EC2 互換 API

Keystone

Nova 等

① →操作・署名

↑② 操作・署名

↓③ ロール

←④ 操作結果

管理 API( 35357/TCP )

Amazon EC2 互換 API( 8773/TCP )

署名( Signature ):ユーザ名・操作日時を含むHTTP リクエストボディをユーザのシークレットキーで計算したハッシュ値

Page 14: OpenStack API

Curl での例①:ユーザ認証$ curl

-d '{"auth": {"tenantName": "tenant1”, "passwordCredentials": {"username": "joe", "password": "shhh"}}}'

-H "Content-type: application/json" http://localhost:5000/v2.0/tokens

{"access": {  "token": {"expires": "2012-10-26T22:27:40Z", "id": "2cd10cc33d034a50b30f9867241c93cc", "tenant": ... },   "serviceCatalog": [ {"nova": { "endpoints": [    {"adminURL": "http://10.0.2.15:8774/v2.0",     "region":   "RegionOne", "id": “....”,     "internalURL": "http://10.0.2.15:8774/v2.0",     "publicURL": "http://10.0.2.15:8774/v2.0"}], "name": "nova", "type": "compute”, ...},

Keystone の認証 API

実行結果を見やすく加工

実際には1行で記述

Page 15: OpenStack API

Curl での例②:サービス操作$ curl -v

-H "X-Auth-Token:2cd10cc33d034a50b30f9867241c93cc"  http://10.0.2.15:8774/v2.0/images

{"images": [ {"id": 3, "links": [  {"href": "http://10.0.2.15:8774/v2.0/images/3", "rel": "self"},   {"href": "http://10.0.2.15:8774/images/3", "rel": "bookmark"}],   "name": "ubuntu-11.04-server"}, {"id": 2, "links": [  {"href": "http://10.0.2.15:8774/v2.0/images/2", "rel": "self"},   {"href": "http://10.0.2.15:8774/images/2", "rel": "bookmark"}],   "name": "ubuntu-11.04-initrd"}, {"id": 1, "links": [  {"href": "http://10.0.2.15:8774/v2.0/images/1", "rel": "self"},   {"href": "http://10.0.2.15:8774/images/1", "rel": "bookmark"}],   "name": "ubuntu-11.04-kernel"}]}

Nova の OpenStack Compute API

Page 16: OpenStack API

OpenStack クライアントライブラリ

Page 17: OpenStack API

クライアントライブラリ登場以前

各コンポーネントのソースコード中にクライアントアクセス用のソースコード( client.py 等)があり、これを他のコンポーネントが利用していた● Nova 用のサーバに Keystone や Glance の

ソースコードを全てインストール(無駄が多い)● 他コンポーネント用サーバも同様

コンポーネント毎の軽量ライブラリが必要

Page 18: OpenStack API

OpenStack クライアントライブラリ

OpenStack の複雑なユーザ認証と、各種 OpenStack API固有の利用可能な操作をPython で簡単に扱う為のライブラリ群● ネーミングルール

python-<コンポーネント名 >client● それぞれ API 操作用の CLI を含む

– python-novaclient には nova コマンドが付属している。他のライブラリも同様

– GlanceだけGlance 本体のソースコードに古い glance コマンドが残っている ※廃止予定

Page 19: OpenStack API

各ライブラリ名とバージョン

コンポーネント クライアントライブラリ名Folsom時のバージョン

Nova python-novaclient 2.9.0

Swift python-swiftclient 1.2.0

Glance python-glanceclient 0.5.1

Keystone python-keystoneclient 0.1.3

Quantum python-quantumclient 2.1

Cinder python-cinderclient 1.0.0

※OpenStack ライブラリのバージョン番号のポリシーがコロコロ変わるので、  git のタグには essex-1 や 2012.1 等が存在する

Page 20: OpenStack API

使用例 (python-novaclient)# python-novaclient をインポートfrom novaclient.v1_1 import client

# 操作用インスタンスを作成# USER, PASS, TENANT, AUTH_URL※ は文字列変数nt = client.Client(USER, PASS, TENANT, AUTH_URL, service_type="compute")

# サーバの一覧nt.servers.list()

# サーバの作成# NAME, IMAGE, FLAVOR, KEYNAME ※ は文字列変数nt.servers.create(NAME, IMAGE, FLAVOR, keyname=KEYNAME)

Page 21: OpenStack API

参考情報

● OpenStack API Quick Start

http://docs.openstack.org/api/quick-start/content/

● Programming OpenStack Compute API with Shell and Python

http://docs.openstack.org/api/openstack-compute/  programmer/content/

● API Specifications

http://docs.openstack.org/api/api-specs.html

● API Complete Reference

http://api.openstack.org/

Page 22: OpenStack API

Q & A

Page 23: OpenStack API

お疲れ様でした!