Más contenido relacionado
La actualidad más candente (20)
Similar a 20140404 vyatta users Group / REST API解説 (20)
Más de Yukihiro Kikuchi (8)
20140404 vyatta users Group / REST API解説
- 1. VYATTA REST-API
Software-Based Networking and Security from Vyatta
1© 2012 Brocade Communications Systems, Inc. CONFIDENTIAL—For Internal Use Only© 2014 Brocade Communications Systems, Inc. Company Proprietary Information
- 2. 話者紹介
• 菊池 之裕(きくち ゆきひろ)
• Twitter @yukihirokikuchi
• ISPにてルータ開発の後、IXにて監視アプリ開発、運用、その他一般
(NetNewsとかDNSとか)
• 2010/04より現職
• プリセールスSE兼OpenFlow,OpenStack,仮想化系一般担当
• Vyatta買収後にVyatta Users Group運営委員に
• ユーザとしての立場でのVyattaサポーター
• いまさっき VyOS Users GroupにSubscribeしました。
© 2013 Brocade Communications Systems, Inc. 2
- 5. なぜAPIが必要なのか?
• 自動化
• 省力化
• 外部からのコントロール
• CLIでダメですか?/GUIでも自動化できますけど?
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 5
- 7. CLIを模倣するツール
#!/usr/bin/expect
set host www.yahoo.co.jp
set path "/stocks/detail/?code=998407.O"
spawn telnet $host 80
expect “Escape“ #例えば、ここで”escape”と返されると、アドリブが効かず、刺さる
send "GET $path HTTP/1.1¥rHost: $host¥rConnection: close¥r¥r"
expect eof
その名の通りexpectする。Expectしたものが来ないと、Timeoutを待つ
Expectした応答が1字違っても期待通り動作しない
例:expect
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 7
- 8. APIはCLIとはどう違う?
要は人間相手か機械相手か
Web/CLIは人間相手/これらは機械相手には設計されていない
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 8
人間の動作 機械の動作
あいまいさ 許容する 許容しない
画面の見栄え 重要 不要
データ配置の柔軟性 高い 極めて低い
エラー処理の柔軟性 極めて高い 低い
レイアウトの変更 問題なし 致命的
読めますよね?
機械が苦手とする例
CLI/Webは人間相手なので、そのままでは自動化しづらい
APIは機械相手-最初から自動化を意識している
感動的なexcel方眼紙
http://oku.edu.mie-u.ac.jp/~okumura/SSS2013.pdf
- 9. 構造化されたtext
• Json
• JavaScript Object Notation
• RESTで標準的に使用される
• JavaScriptとあるが、言語に依存しない
• XML
• eXtemted Markup Langange
• SOAP/NetConfで標準的に使用される
• 言語依存なし
Structured text
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 9
- 12. CLIを模倣する手法の問題点(Contd.)
• エラーの例
• Configモードへ移行する場合
• エラーパターン(その1)
• vyatta@vyatta:~$ configuree
• Invalid command: [configuree]
• vyatta@vyatta:~$
• エラーパターン(その2)
• vyatta@vyatta:~$ con
• Ambiguous command: [con]
• Possible completions:
• configure Enter configure mode
• connect Establish a connection
エラーメッセージも千差万別
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 12
もちろん、こんなミス(スペルミス)
はscriptでは起きようがない。
ただし、CLI syntaxの変更は予告なく
行われている。
今日動くscriptが次のpatchで正常に動作
する保証はない。
人間ならエラーメッセージに応じて
対処可能なのだが。
- 13. APIを使用する場合
• RESTの場合
• HTTPスタータスコードを確認
• 200/201が成功/400だとエラー
• (メッセージがあれば)JSONで記載されている
• JSONは容易にparseできる(たいていのプログラム言語はライブラリが準備されている)
• SOAP over HTTPの場合
• HTTPステータスコードを確認
• 200/400などを確認
• 併せてSOAPエンベロープを確認
• エラーメッセージはSOAP(XML)をparseして確認する(たいていのプログラム言語はライブ
ラリが準備されている)
エラー処理は明確に定義されている
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 13
- 14. APIを使用する場合
• NetConf over httpの場合
• HTTPステータスコードを確認
• 200/400などを確認
• 併せてXML/YANGを確認
• エラーメッセージはXMLをparseして確認する(たいていのプログラム言語はライブラリが準
備されている)
エラー処理は明確に定義されている
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 14
- 15. APIの約束
• 下位互換性を基本的に担保
• 仕様は変更されうるが、影響を最小限に抑える形で変更される
• ライブラリ側で吸収できるような変更のみ
• エラーコードの変更は行われない
• ステータスコードを基準にしてエラー処理が可能
• メッセージは変更されうるが、これが変更されてもAPI経由の動作は影響を受けない
• Versioning
• Versionを明記することで下位互換性を保持
下位互換性
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 15
- 17. RESTfulとは?
• では、RESTとは?
(WikiPediaより抜粋)
• Representational State Transfer(REST) は、ウェブのような分散ハイパーメ
ディアシステムのためのソフトウェアアーキテクチャのスタイルのひとつ
である。この語は2000年に、HTTPプロトコル規格の主要著者の一人であ
るen:Roy Fieldingが、ウェブについて書いた博士論文で初めて現れ、ネッ
トワーキングコミュニティの中ですぐに広く使われることになった。
RESTは、初めはアーキテクチャの原則と制約の集まり(後述)を指していた
が、次第に、XMLやHTTPを使った簡易なウェブベースのインターフェイス
のうち、WebサービスのSOAPプロトコルのような MEP(Message
Exchange Pattern; SOAPノード相互のメッセージ交換のパターンを確立する
ための雛型)ベースの特別な抽象化をしないもののことを、大まかに意味
する用語として使われるようになった。
REST原則に従うシステム(WikiPediaより)
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 17
- 19. SOAP/Netconfとはどう違う?
• SOAP/Netconfはメッセージ転送プロトコルに依存しない
• http(s)/ssh,etc(機器の実装に依存)
• エラー確認はSOAP/YANGをフォーマットを解釈する必要あり
• 下位メッセージ転送レイヤでのエラーコードだけではエラーの確認はできない
• RESTはhttpに依存
• http(s)を利用
• httpステータスコード(400/200/etc.)で実行の可否を判別可能
• Error stringはHTTPbody(json)で提供
RESTのプロトコル構造
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 19
HTTP
REST(json)
HTTP ssh Etc.
SOAP Envelope
ssh Etc.
YANG
REST SOAP NetConf
HTTP
- 22. Vyatta OS Architecture
Linux Kernel with Multi-Platform Virtualization Drivers
Routing Firewall NAT VPN QoS IPv6
Vyatta Data Model
CLI API GUI
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 22
- 23. Vyatta OS Architecture
Linux Kernel with Multi-Platform Virtualization Drivers
Routing Firewall NAT VPN QoS IPv6
Vyatta Data Model
CLI API GUI
ココ!
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 23
- 25. VyattaでのREST-API
• POST /rest/conf
• (ここでconf-id取得)
• 同等なCLI:$configure
• PUT /rest/conf/<conf-id>/set/<path>
• 同等なCLI:#set …
• POST /rest/conf/<conf-id>/<cmd>
• 同等なCLI:#commit,save,etc
• GET /rest/conf/<conf-id>/<path>
• 同等なCLI:#show
その流れ(configモード)
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 26
- 26. VyattaでのREST-API
• GET /rest/conf
• 同等なCLI:N/A
• (現在走っているセッションを確認)
• DELETE /rest/conf/<conf-id>
• 同等なCLI:exit
その流れ(configモード):Contd.
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 27
- 28. クラウド環境でのデモ
• さくらのクラウド ⇔ Cloud(n) 間でVPN構築
• RESTでやってみます。
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 29
- 29. ネットワーク環境
• REST
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 30
10.1.0.1/24
OpenVPN
RESTで設定、クラウド間VPNを構築
10.0.0.1/24
10.0.0.100/24
153.149.38.46
- 30. 実際のオペレーション
• Configモードへの移行
$ curl -k -s -i -u vyatta:vyatta -H "content-length:0" -H "Accept: application/json" -X
POST http://192.168.1.202/rest/conf
HTTP/1.1 201 Created
Content-Type: application/json
Location: rest/conf/45F76296CD266AFE <=これが<conf-id>
…後略
Curlの例
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 31
まず、conf-idを取得します。
以後、これを通してコンフィグレーションを行います
- 32. まとめ
• REST-APIはユーザフレンドリ
• テスト/開発/デバッグ/デプロイが容易
• 外部から機器をコントロールするための標準手法
• 各言語のライブラリを使用可能(Python,Ruby,Perl,….)
• 他システムとの統合(OpenStack,CloudStack,etc..)
• 自製ツールへの組み込み
• 自動化による工数削減
• 統一されたエラーハンドリングによる開発効率の向上
• DevOps / Immutable Computing が可能に
REST-API
© 2014 Brocade Communications Systems, Inc. Company Proprietary Information 33
- 33. THANK YOU
34© 2014 Brocade Communications Systems, Inc. Company Proprietary Information