■ はじめに
2019/12/10-11 に開催された、DevNet Express for DNA [Tokyo] に参加してきました。 ネットワークプログラマビリティをテーマにした、ハンズオンを含むインベントです。
「for DNA」とついているのは、Cisco DNA Center という製品を中心としたエンタープライズ領域向けという位置づけのようです。とはいえデータセンターなど他の領域でも共通の部分は多分にありました。
Python の基礎からはじまり、様々な製品の API に触れられるとても楽しいイベントでした。
ざっくり言うと、DevNet の以下の日本語コンテンツにそったハンズオンです(CMXは対象外)。
コードはこちら
この記事では、学習したことの概要や感じたことなどをまとめます。
#DevNetExpress for #CiscoDNA in Tokyo has just started :-) pic.twitter.com/BJ53GKBC4b
— Kazumasa Ikuta (@kazumasaikuta) 2019年12月10日
参加したいと思った理由
モデル駆動型プログラマビリティに興味があったり、Meraki や DNA Center を触るハンズオンをしたかったので参加させていただきました。また、2020/02/24 のシスコ認定資格の大改訂と同時に始まる DevNet Associate Exam v1.0(200-901) などの、ネットワークプログラマビリティ・自動化型の認定試験の資格のとっかかかりとしても有用なのではと思い、参加しました。
実際は応募が多数で抽選制だったようです。運が良かったです。ありがたい・・。
■ 日程
(こちらのPDFからタイトル抜粋)
1 日目: 12/10 09:00 ~ 09:30 受付 09:30 ~ 10:00 オープニング 10:00 ~ 13:00 REST, プログラミング, Python の基礎と概要 13:00 ~ 14:00 昼食 14:00 ~ 15:30 コントローラを使ってデバイスを管理する: DNA Center の概要 15:30 ~ 16:00 DNA Center: ミッション 16:00 ~ 17:30 デバイスを直接管理する:モデル駆動型プログラマビリティの概要 17:30 ~ 18:00 モデル駆動型プログラマビリティ: ミッション 18:00 ~ 20:00 懇親会 2 日目: 12/11 09:30 ~ 09:55 受付 09:55 ~ 10:00 オープニング 10:00 ~ 11:30 Guest Shell を使ってユーティリティと Python スクリプトをルータとスイッチ上で直接実行する 11:30 ~ 12:00 Guest Shell: ミッション 12:00 ~ 13:00 昼食 13:00 ~ 14:30 NFVIS を使ってネットワーク機能の仮想化 (NFVIS) を実現する 14:30 ~ 15:00 NFVIS: ミッション 15:00 ~ 16:30 Meraki API を使って、Meraki ネットワークの設定、管理、モニタリングを自動化する 16:30 ~ 17:00 Meraki API: ミッション 17:00 ~ 17:30 クロージング
■ 1日目にやったこと・感想
環境の確認
- 対応コンテンツ: Cisco DevNet Learning Labs
利用するツール類は、Python、git、Postman、ブラウザあたりです。ひとりずつ専用のラボ環境が用意されいて、そこに一通りいたので、そこに RDP で入るか、同等の手元の環境を使うか、といった感じでした。
Python 基礎
- 対応コンテンツ: Cisco DevNet Learning Labs
Python については、Hello, World
の表示から始まり、リストやディクショナリなどのデータ構造、if
や for
などの制御分の説明もあったのっで、プログラミング初心者にもやさしい内容だったと思います。
git も少し触りましたが、確か git clone
のみだったので難易度は高くないです。
API の基礎
- 対応コンテンツ: Cisco DevNet Learning Labs
API でよく利用されるデータフォーマットである、JSON の説明もありました。データをうまく料理するには、読み方はちゃんとおさえておきたいところですよね。
API を叩くには Postman を利用しました。プログラムや curl
コマンドではなく、このようなツールを利用するのはとっつきやすいと思いました。
Postman でつくったリクエストを Python などのコードに変換できるの知らなかった#devnetexpress pic.twitter.com/33ANARf14h
— よこち(yokochi) @ Ansible実践ガイド 第3版 (@akira6592) 2019年12月10日
DNA Center と API
- 対応コンテンツ: Cisco DevNet Learning Labs
いままで画面をちらっと見たくらいでしかなかった DNA Center の API を Postman や Python から叩くハンズオンを行いました。
Python の方は「ミッション」と呼ばれる、穴埋め課題も用意されていました。 完成して実行してうまくいくと、Webex Teams に投稿される様になっていたので「えっ、誰かもうできたの!?」と思ったり、ちょっとゲーム要素がありました。
この方式のミッションはこのハンズオンでもたびたび出てきました。
モデル駆動型プログラマビリティ
- 対応コンテンツ: Cisco DevNet Learning Labs
NETCONF、YANG、RESTCONF の概要を座学で学んだあと、NETCONF の Python クライアントである ncclient を使用したスクリプトを実行したりしました。
NETCONF の各オペレーション(<get>
、<edit-config>
など)と、RESTCONF の各メソッド(GET
、POST
など)の対応の説明があり、頭の整理ができて良かったです。
また、NETCONF については、モデルを調べるのに便利ANX (Advanced NETCONF Explorer)
というツールがあることを知れました。
■ 2日目にやったこと・感想
Guest Shell
- 対応コンテンツ: Cisco DevNet Learning Labs
ネットワーク機器上で LXC コンテナが動き、その中で Python スクリプトなどを実行できる仕組み。 EEM と組み合わせて、コンフィグに変更があったときに、Webex Teams に差分を通知するという Python スクリプトを仕上げたりしました。
2日目の最初のハンズオンは、ネットワーク機器上のLXCコンテナで動くゲストシェル。ネットワーク機器でyum打つの新鮮。#DevNetExpress pic.twitter.com/z46Dzjlsy3
— よこち(yokochi) @ Ansible実践ガイド 第3版 (@akira6592) 2019年12月11日
コンテナ側からは dohost hogehoge でネットワーク機器側(?)のコマンドが打てるみたい。#DevNetExpress pic.twitter.com/652H3K2HRj
— よこち(yokochi) @ Ansible実践ガイド 第3版 (@akira6592) 2019年12月11日
正直、いままでは使いみちがピンとこなかったのですが、ネットワーク機器自身に自律的になにかやってほしいときには良いのかなと思いました。
NFVIS と API
- 対応コンテンツ: Cisco DevNet Learning Labs
ネットワーク機器に特化したハイパーバイザ、NFVIS。初めて知りました。これもやっぱり API を備えていて、Python から情報を取得したり、VMをデプロイしたりしました。
CiscoのNFV向けハイパーバイザ?のNFVIS 初めて見ました。#DevNetExpress pic.twitter.com/i6pqupyT1Y
— よこち(yokochi) @ Ansible実践ガイド 第3版 (@akira6592) 2019年12月11日
Python から API 経由で NFVIS上に IOSとASAでデプロイしてネットワークにくっつける穴埋めミッションできた#DevNetExpress pic.twitter.com/AMHwnvon9e
— よこち(yokochi) @ Ansible実践ガイド 第3版 (@akira6592) 2019年12月11日
Cisco には NFV 向けの Enterorise Network Compute System(ENCS) というハードウェアがあることも初めて知りました。ネットワーク機器とサーバーの間のようなインターフェースを持つ機器のようです。
Meraki と API
- 対応コンテンツ: Cisco DevNet Learning Labs
大きく分けて、Dashboard API、Scanning API、Captive Portal APIがって、前者2つを触りました。
APIドキュメントはこちらで、実際に試せました。
最後のハンズオンということもあり、少し慣れてきました。
念の為 Ansible からも meraki つついてみました。meraki_organization モジュールの state を query にすると 一覧を get できるもよう。merakiモジュール初めて触りましたが19個あるのですね。https://t.co/a1QmOoBLkJ#DevNetExpress pic.twitter.com/q9sB5zuL7x
— よこち(yokochi) @ Ansible実践ガイド 第3版 (@akira6592) 2019年12月11日
■ まとめ
丸2日間、たっぷり楽しめました。あまり知らない製品もありましたが、概要の説明があってからのハンズオンだったので、なにをやっているのかがイメージしやすかったです。
さまざまな製品の API を叩きましたが、API ドキュメントの調べ方は少し難しかったです。調べ方がうまくできるようにあると、もっと作業が捗るんだろうなと思いました。
また「ネットワークエンジニアもプログラミングが求められる時代」となんとかく言われる雰囲気はありますが、Python の基礎を延々と繰り返したり、Webアプリケーションを作ったりするよりも、今回のようにネットワークエンジニアに馴染みのある機器の操作するほうがとっつきやすいかも知れません。
ありがたいことに、DevNet Sandbox や、dCloud によって個人で無料で触れる環境があるので、今後もいろいろ触ってみたいと思います。
主催の Cisco のみなさま、ありがとうございました!