2021年7月4日にAutomating and Programming Cisco Service Provider Solutions v1.0 (SPAUTO 300-535) になんとか合格できたので、受験記を書いてみます。この試験に関しては、まだかなり情報が少ないので、受験を考えている方の参考になれば幸いです。
前半の記事は下記をご覧ください。
早速勉強内容の続きから行きます!
- 勉強した内容(続)
- 3.0 Network Device Programmability
- 3.1 Deploy device configuration and validate operational state using ncclient
- 3.2 Construct a Python script using NETCONF with YDK
- 3.3 Deploy device configuration and validate operational state using NetMiko
- 3.4 Deploy device configuration and validate operational state using Ansible playbooks
- 3.5 Compare gNMI with NETCONF
- 3.6 Construct a Python script using RESTCONF with JSON
- 3.7 Construct Xpath notation for a given node or instance of a node
- 3.8 Diagnose model-driven dial-in/-out telemetry streams with gRPC for a Cisco IOS XR
- 4.0 Automation and Orchestration Platforms
- 4.1 Describe ETSI NFV
- 4.2 Describe NSO architecture
- 4.3 Identify the benefits of NSO
- 4.4 Construct a Python script to configure a device using NSO RESTCONF API
- 4.5 Describe the management and automation of Cisco ESC components
- 4.6 Implement XR traffic controller (including topology information transfer to XTC)
- 4.7 Identify the uses of Cisco WAE
- 4.8 Construct a service template using NSO
- 4.9 Deploy a service package using NSO
- 3.0 Network Device Programmability
- まとめ
勉強した内容(続)
下記のExam Topicsに沿って勉強をしました。予告なしで変更される可能性があるとのことで、時間が経つとこのブログと試験内容が乖離する可能性がありますが、現時点でのExam Topicsに沿ってどんな勉強したか?を書いてみます。Exam Topicsの記載から大きく外れる問題は出題されませんでした。
前半では、「1.0 Network Programming Foundation」と「2.0 Automation APIs and Protocols」について記載したので、後半では、「3.0 Network Device Programmability」と「4.0 Automation and Orchestration Platforms」についてどういう勉強をしたのかを書いてみます。
3.0 Network Device Programmability
3.1 Deploy device configuration and validate operational state using ncclient
下記リンクのサンプルスクリプトを手元の環境で動かしてみて、ncclientを使った一番シンプルなスクリプトをある程度空で書けるようにしました。各パターンのスクリプトを比較して、目的に応じてどの関数を利用するのか?(get_config, edit_config, etc)、関数のパラメータはどのように設定するのか?(source/target datastore等)に注目して勉強するとスムーズかなと思いました。
3.2 Construct a Python script using NETCONF with YDK
YDK (YANG Development Kit)は、YANG modelから様々なプログラミング言語で利用可能なAPIを作成することができ、API generator (YDK-gen)と生成されたAPIのセット(YDK-Py, YDK-Cpp, etc)で構成されます。詳しい内容は下記リンクに記載されています。
Pythonでのサンプルスクリプトは下記にあります。私は、YDKを実行してみる時間がなかったため、hello-ydk.pyを見て、スクリプトの書き方を学びました。
YDKのインストール自体は、pipコマンド一行で簡単にできるようなので、時間に余裕があれば、やってみても良いかと思います。
また、Ciscoliveの資料にも図を用いたYDKの概要とサンプルスクリプトが載っているので、参考になります。
3.3 Deploy device configuration and validate operational state using NetMiko
Netmikoは、ネットワーク機器にSSH / Telnet接続をして、showコマンドの実行やコンフィグの設定などを行うことができるPythonライブラリです。こちらもシンプルなスクリプトを書いてみて、その書き方を学びました。
commandを実行する際は、send_command関数、configを投入する際は、send_config_set関数を利用し、configはリスト形式で指定するなどを抑えておくと良いかなと思います。
すこし長くなってしまったので、サンプルスクリプトは下記に記載しました。
3.4 Deploy device configuration and validate operational state using Ansible playbooks
Ansibleは、エージェントレスの構成管理・オーケストレーションツールです。Ansibleの概要とAnsibleによるCisco機器の設定方法は下記が参考になりました。
こちらも手元の環境で勉強した際のサンプルプレイブックは下記のページに記載しました。
3.5 Compare gNMI with NETCONF
gNMIはNETCONF, RESTCONFと同じく、IOS-XE, IOS-XR等からデータを取得したり、コンフィグ投入するなどができるProgrammable Interfaceです。YANG data modelを使用する点は共通していますが、Operation, Encoding, Transport方法に違いがあります。下記にわかりやすい比較図が掲載されていたので、リンクを貼っておきます。
3.6 Construct a Python script using RESTCONF with JSON
3.1と同様に、Pythonのurllib3ライブラリを使ったシンプルなスクリプトをある程度空で書けるようにしました。下に参考リンクと手元の環境で勉強した際のサンプルプレイブックのページを貼っておきます。コマンド実行とコンフィグ投入の簡単なスクリプトが組めれば、試験対策としては十分なのかなと思います。
3.7 Construct Xpath notation for a given node or instance of a node
Xpath (XML Path Language)は、XMLをツリー構造としてモデル化し、パス形式でXML内の要素を指定する言語です。YANG data modelからXpathを作成できるようにしておくとよいかなと思います。NETCONFではXMLを使用しますが、ncclientではXpathも使用できます。
Xpathを用いた場合のサンプルコードを下記に記載してみましたので、参考にして頂ければと思います。
3.8 Diagnose model-driven dial-in/-out telemetry streams with gRPC for a Cisco IOS XR
“Diagnose”と書いてあるところがポイントで、telemetryの設定ができるというよりも、showコマンドとコンフィグから問題発生時の原因特定ができることが求められていると感じました。
telemetryのトラブルシュートの良い参考資料が見つけられなかったのですが、下記リンクなどを参考にコンフィグの設定方法とshowコマンドの出力例を見ておくと良いかなと思いました。
4.0 Automation and Orchestration Platforms
この項目は一番警戒していたのですが、そこまで深い知識は問われなかったです。NSOを重点的に、XTCも忘れずに対策をとれば大丈夫かと思います。
4.1 Describe ETSI NFV
ETSI NFVは、NFVアーキテクチャの標準リファレンスモデルを確立しており、CiscoのNFV製品群を始めとし、様々なNFV製品に参照されています。アーキテクチャ概要や各Releaseで策定された内容は下記が参考になります。
- ネットワーク仮想化の技術動向 (KDDI総合研究所) (p.10) ←一番まとまっている
- 【Ciscolive】Introduction to NFV using ETSI Standard (p.6 – 13)
4.2 Describe NSO architecture
NSO (Network Service Orchestrator)は、「サービスモデル(何をしたいか?)」と「デバイスモデル(ベンダ依存コンフィグ)」を分離してベンダに依存しない操作を実現している点が特徴です。
デバイスモデルは、モデル化言語YANG (RFC 6020) を使ってデバイスコンフィグをモデル化したもので、NSO が持つデバイスモデルと、実際のデバイスが受け付けるインターフェイス (例: IOS CLI など) の変換は Network Element Driver (NED) によって行われます。
サービスモデルもYANGを使い、サービス(例えば、拠点 X と拠点 Y で VPN ID Z の VPN を確立する等)をモデル化したもので、ネットワークが提供する機能に対応した設定パラメータを定義します。デバイスモデルへのマップは XML テンプレートとマッピングロジックによって行います。
NSOは、Configuration Database(CDB)と呼ばれるデータベースを内蔵しており、機器のコンフィグは NSO 内の CDB上でモデル化されているため、自由にフォーマットを変えて表示することができます。
Northbound APIに関しては、現在のバージョンでは、RESTは廃止され、NETCONF, RESTCONF, JSON-RPCがサポートされています。
下記が参考になります。
- DevNet : Learn NSO: The Easy Way
- DevNet : NSO (Network Services Orchestrator) Dev Center
- Ciscolive : Network Automation Journey with Cisco Network Services Orchestrator (NSO)(p.19, 20)
4.3 Identify the benefits of NSO
- マルチベンダ対応
- ベンダごとに異なるCLIインタフェースをYANGでモデル化し、NEDとして提供
- NED非対応のデバイスでもNETCONF/YANGをサポートしている場合は、そのYANGモデルをデバイスモデルとしてNSOに取り込むことが可能
- ちなみに、NEDを生成する方法はこちらに詳細が記載されており、参考になります。
- 開発コストの削減
- サービスモデルの作成とデバイスモデルへのマッピングの実施により、ロールバック用の差分情報などをすべて FASTMAP エンジンが計算
- サービス削除・変更・エラーハンドリング用の開発が不要
- Northbound APIが自動生成
- オペレーションミスの削減
- サービスモデルはYANGで定義するため、ある範囲の数値のみ受け付けるなどの入力値のルールを設定することが可能
- ルールから外れる入力をした場合は、コミットされない
下記リンクが参考になります。もう少し最新の日本語資料があると思うのですが、ネット上では見つけられず、発見次第こちらに記載したいと思います。
4.4 Construct a Python script to configure a device using NSO RESTCONF API
よく使いそうな用途に対して、シンプルなスクリプトを書いてメソッド、URI, bodyの指定の仕方に着目して学びました。長くなってしまったので、下記リンク先に別記事として記載しました。
下記リンクを参考にしています。
4.5 Describe the management and automation of Cisco ESC components
Cisco ESC (Elastic Service Controller)は、マルチベンダ対応のVNF managerです。試験対策としては、下記のp.36-45を参考に、ESCの特徴を勉強しておけば大丈夫かなと思います。
- https://www.ciscolive.com/c/dam/r/ciscolive/emea/docs/2018/pdf/BRKNMS-2309.pdf
4.6 Implement XR traffic controller (including topology information transfer to XTC)
XTC (XR Traffic Controller)は、IOS-XR上で機能するPCE(Path Computation Element)です。BGP-LSを用いて、OSPFもしくはISISのトポロジー情報を取得し、パス計算を行います。 XTCに関しては、設定方法問われるので、概要だけでなく、コンフィグ等もちゃんと抑えておいた方が良いと思います。下記のリンクがとても参考になりました。
- ODNとXTCによる快適なSR-TE policy運用
- Ciscolive : Network Automation and Programmability for Service Providers (p.27-36)
4.7 Identify the uses of Cisco WAE
WAE (Wan Automation Engine)は、トポロジーやリンク間トラフィック情報の可視化を行い、キャパシティプランニングや障害影響予測等の実施ができます。XTCとの連携も可能です。
4.8 Construct a service template using NSO
このページに書くにはあまりにも長くなってしまったので、下記にNSOサービステンプレートの作成から実行までの流れと実際にやってみたログを記載してみました。
NSOでのサービスモデルの作成からデプロイの流れをまとめると、下記のようになります。各ステップでどのようなコマンドをどのディレクトリで実行するのかというのは抑えておいた方が良いかなと思います。
- パッケージの作成
- サービスモデル(YANGファイル)の定義
- サービステンプレート(XMLファイル)の編集
- サービスモデルのコンパイル
- パッケージの読み込み
4.9 Deploy a service package using NSO
上記のページに詳細を記載していますが、”package reload”を実行することで、作成したパッケージを読み込み、デプロイします。
このリンクも参考になります。
また、手元にサーバやルータが用意できる方であれば、無償で提供されている評価版のNSOも利用できそうです。
まとめ
長くなってしまいましたが、2記事にわたってSPAUTO合格までに勉強した内容をここを勉強したらよかったなと思ったことも含めて、書いてみました。
Exam Topicsの項目名の先頭が「Describe」なのか、「Construct」なのかに注目すると対策しやすいかと思います。
Construct系の項目についても、複雑なスクリプトの記述や解釈は求められないので、スクリプト問題対策としてはとにかくシンプルなスクリプトを理解して書けるようにする作戦が試験合格のためには効率が良いと思いました。
まだ試験の過渡期かもしれませんが、全体的に深い知識を問われる問題はない印象です。ただ、サービスプロバイダでの自動化の取り組みで役に立つ知識やツール、Cisco製品がある程度網羅されていると思いますので、現在自動化に取り組まれている方、今後自動化に取り組もうと思われている方は、取得しておいて損はないと思いました。
自動化ソリューションは移り変わりが激しいので、この試験もおそらく試験内容が変わっていく(特に「4.0 Automation and Orchestration Platforms」)と思いますが、少しでも今後受験される方の参考になりましたら幸いです。
ネットワーク自動化を基礎から体系的に学びたい方は下記の本がおすすめです。
コメント