Cisco NSO の学習リソースをまとめてみた！

# :santa: 目次
1. [はじめに](#anchor1)
1. [Cisco NSO とは？](#anchor2)
1. [NSO の学習リソースまとめ](#anchor3)
1. [NSO Dev Center](#anchor4)
1. [Cisco DevNet Learning Labs Center](#anchor5)
1. [Cisco Code Exchange](#anchor6)
1. [DevNet Sandboxes](#anchor7)
1. [評価版 NSO](#anchor8)
1. [example.ncs](#anchor9)
1. [dCloud](#anchor10)
1. [その他のお役立ちリンク](#anchor11)
1. [最後に](#anchor12)
1. [免責事項](#anchor13)


<a id="anchor1"></a>
# :santa: はじめに

本記事はCiscoの有志による Cisco Systems Japan Advent Calendar 2024 カレンダー2の8日目として投稿しています:christmas_tree::sparkles: 今回は、10年以上の長い歴史を持つ Cisco NSO の膨大な学習リソースについてまとめてみました！

* 2024年版: https://qiita.com/advent-calendar/2024/cisco
* 2023年版: https://qiita.com/advent-calendar/2023/cisco
* 2022年版: https://qiita.com/advent-calendar/2022/cisco
* 2021年版(一枚目): https://qiita.com/advent-calendar/2021/cisco
* 2021年版(二枚目): https://qiita.com/advent-calendar/2021/cisco2
* 2020年版(一枚目): https://qiita.com/advent-calendar/2020/cisco
* 2020年版(二枚目): https://qiita.com/advent-calendar/2020/cisco2
* 2019年版: https://qiita.com/advent-calendar/2019/cisco
* 2018年版: https://qiita.com/advent-calendar/2018/cisco

<a id="anchor2"></a>
# :santa: Cisco NSO とは？
物理・仮想製品及び 3rd Party 製品を含めた「単一コントローラによるネットワークの一元管理」を実現するソフトウェア製品です。
WAN ネットワーク、データセンタースイッチ（Nexus/ACI 等）、仮想サーバ基盤、Firewall や Load Balancer などのネットワークサービス機器まで含め マルチベンダーで物理・仮想に関わらず一元的な管理と自動化が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/918fb99c-0ce0-3f1a-cc55-f6cf3e9fadb3.png)


<a id="anchor3"></a>
# :santa: NSO の学習リソースまとめ

下記に NSO 学習リソースを表でまとめてみました。ほとんど全て無償でご利用いただけます。

| **リソース名** | **対象者**  | **用途**  | **特徴** | **リンク**  |
|:-:|:-:|:-:|:-:|:-:|
| **Cisco NSO Dev Center** | 初心者～上級者 | NSO学習、概要理解、コミュニティ参加 | NSOの概要、学習ラボ、ドキュメント、コミュニティへのリンクが集約された中核的なサイト。 | [NSO Dev Center](https://developer.cisco.com/site/nso/) |
| **Cisco DevNet Learning Labs** | 初心者～中級者 | ハンズオン学習  | 17のラボ、7のモジュール、1のトラックを提供。実行コマンドのコピー＆ペーストが可能なインタラクティブラボ。 | [Learning Labs](https://developer.cisco.com/learning/) |
| **Cisco Code Exchange**  | 開発者、エンジニア  | コード共有、テスト、再利用  | GitHub連携のオープンソースプロジェクトディレクトリ。ブラウザベースのIDEでNSOの即時テストが可能。 | [Code Exchange](https://developer.cisco.com/codeexchange/) |
| **DevNet Sandboxes**  | 中級者～上級者  | 複雑なシナリオや高可用性のテスト | 最大5日間利用可能な仮想環境。3つのNSOインスタンスとCMLトポロジーで実際のネットワーク環境を再現可能。 | [DevNet Sandboxes](https://devnetsandbox.cisco.com/DevNet) |
| **評価版NSO** | 初心者～中級者  | ローカル環境でのNSO試用、評価  | NSOを非商用ネットワーク向けに無償提供。ラボ環境にインストールして利用可能。 | [評価版NSO](https://community.cisco.com/t5/-/-/ta-p/4760965)                         |
| **example.ncs**  | NSO利用者全般  | 学習コンテンツ利用、ドキュメント参照 | NSOインストーラ同梱のサンプルコードとドキュメントを活用可能。無償トライアル版にも含まれる。 | NSOコンテナやインストーラ内に収録　|
| **dCloud**  | 初心者～上級者 | Cisco製品のデモ、検証、学習 | 初期設定済みの環境で検証やデモが可能。CNCとのインテグレーションに対応。シスコアカウント(CCO ID)でアクセス可能。 | [dCloud](https://dcloud.cisco.com/)  |

NSO を初めて学習するが、時間がないと言う方は、[NSO Dev Center](https://developer.cisco.com/site/nso/) の "NSO Introduction" がおすすめです。ブラウザ上でのインタラクティブラボにて10分でNSOの基本操作を学ぶことができます。

体系的に学びたいと言う方は、[DevNet Learning Labs](https://developer.cisco.com/learning/)がおすすめです。こちらもブラウザでのインタラクティブラボを利用し、基本から応用までをステップバイステップで学習できます。目安学習時間は約20時間です。

すでにNSOラボ環境をお持ちの場合、インストーラーに内蔵されているexample.ncsにて基本から応用まで豊富なシナリオをカバーする学習リソースを利用できます。こちらも手を動かしてステップバイステップで学ぶことができます。

発展的な内容もしくは自由にNSOを触ってみたいと言う方は、[Code Exchange](https://developer.cisco.com/codeexchange/)もしくは[DevNet Sandboxes](https://devnetsandbox.cisco.com/DevNet)が有用です。

Cisco の他の製品（例えば Crosswork Network Controller(CNC)）とのインテグレーションなどについて学びたい方は、[dCloud](https://dcloud.cisco.com/)がおすすめです。

下記に各学習リソースの詳細をご説明します。


<a id="anchor4"></a>
# :santa: [NSO Dev Center](https://developer.cisco.com/site/nso/)
[NSO Dev Center](https://developer.cisco.com/site/nso/)は、NSOの概要、学習ラボ、ドキュメント、コミュニティへのリンクが集約された中核的なサイトです。

まず困ったらこのページへアクセスするとおそらく必要な情報に辿り着くと思います。入門者から上級者まで対応するコンテンツへのリンクを提供しており、いつでも10分間で学べる初心者向けNSOハンズオンラボから、パフォーマンスの改善やAnsibleとの連携など上級者向けトピックまでカバーしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/8886172b-9ed5-80f5-0770-97c407ae4604.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/7ba5a30d-9dc9-5046-2510-237550d4523b.png)


<a id="anchor5"></a>
# :santa:  [Cisco DevNet Learning Labs Center](https://developer.cisco.com/learning/) 
[Cisco DevNet Learning Labs Center](https://developer.cisco.com/learning/)は、NSOをはじめ、さまざまなCisco製品に対応したインタラクティブな学習環境を提供しています。

NSOに関しては、基本から応用まで幅広くカバーした17のラボ、7のモジュール、1のトラックが提供されています。モジュールはラボをグループ化したもの、そしてモジュールをグループ化したものがトラックです。

何から始めたら良いか迷った場合は、「NSO Basics for Network Automation」のトラックから始めてください。下記のようにステップバイステップで学習すべきモジュールや実施すべきラボを案内してくれます。実行するコマンドもクリック一つで簡単入力できるようになっており、NSOに慣れていない方でも進めやすいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/383208da-7344-417d-20c0-021cb7b8e055.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/78092c59-990e-9ce6-9681-5adaf51ff0bf.png)

<a id="anchor6"></a>
# :santa:  [Cisco Code Exchange](https://developer.cisco.com/codeexchange/)
[Cisco Code Exchange](https://developer.cisco.com/codeexchange/)は、Cisco製品やソリューションに関連するオープンソースプロジェクトを集めたリポジトリディレクトリです。世界中の開発者やCiscoのエキスパートによって共有されるオープンソースプロジェクトが参照できます。GitHubと連携しており、プロジェクトのコードや詳細を直接閲覧・活用可能です。

下記の赤枠にある「With Cisco Cloud IDE」にチェックを入れ、検索をすると、ブラウザベースの統合開発環境（IDE）で、すぐにテストや学習が可能なサンプルコードを調べることができます。

![Screenshot 2024-12-08 at 19.33.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/e5bf5c09-0e0d-2d2f-e8b5-bb781136d09f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/fd0ff53e-1a53-5dd7-7890-b9af78b976c1.png)

シンプルにローカルインストールまたはシステムインストールのNSOをWebブラウザですぐに触ってみたいという方は、「NSO-Playground-Local-Install」や「NSO-Playground-System-Install」をご利用ください。


<a id="anchor7"></a>
# :santa:  [DevNet Sandboxes](https://devnetsandbox.cisco.com/DevNet)
[DevNet Sandboxes](https://devnetsandbox.cisco.com/DevNet)では、最大5日間利用可能な仮想環境を提供しています。３NSOインスタンスを含み、複雑なシナリオや高可用性（HA）をテスト可能です。実際のネットワークデバイスとのインタラクションをCMLトポロジーを使って再現可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/fe5281bf-1eb9-26ab-afe0-fd561384383f.png)


<a id="anchor8"></a>
# :santa: 評価版NSO
NSOの評価版（無償トライアル版）が、非商用ネットワーク向けの評価目的に限って無償で公開されています。ご自身のラボにNSOをインストールして試したい場合は、こちらをご利用ください。

詳しくは下記をご参照ください。
- [評価版 NSO を Windows で試してみよう](https://community.cisco.com/t5/-/-/ta-p/4760965)
- [評価版 Cisco NSO を使ってみよう [2020年版]](https://gblogs.cisco.com/jp/2020/02/lets-evaluate-cisco-nso-2020/) (Linux へのインストール)
- [トライアル版でお試し！簡単＆便利な Cisco NSO コンテナを利用する方法をご紹介！](https://youtu.be/lk3K2FNEtiw?si=OkxrYl-fqInKhajU) (YouTube動画)


<a id="anchor9"></a>
# :santa: example.ncs
NSO コンテナやインストーラには、NSO のドキュメンテーションやNSO 学習用コンテンツが含まれています。ご自身ですでにNSOをインストールされたラボ環境をお持ちの場合は、こちらもご活用いただけます。無償トライアル版にも含まれています。

NSO のドキュメンテーションは、doc フォルダに格納されています。ブラウザで index.html を開いて、様々なドキュメントにアクセスできます。
```
nso@localhost:~$ cd NSO-6.1.10/doc
nso@localhost:~/NSO-6.1.10/doc$ ls
api  html  index.html  pdf
```

NSO 学習用コンテンツは、examples.ncs フォルダに格納されています。簡単な例から複雑な例まで様々なサンプルがあります。
```
nso@localhost:~$ cd NSO-6.1.10/examples.ncs
nso@localhost:~/NSO-6.1.10/examples.ncs$ ls
crypto             generic-ned        implement-a-service  service-provider            web-server-farm
datacenter         getting-started    misc                 snmp-ned                    web-ui
development-guide  high-availability  README               snmp-notification-receiver
nso@localhost:~/NSO-6.1.10/examples.ncs$
```

examples.ncsに含まれる学習コンテンツは下記のとおりです。NSOバージョンによって異なる可能性がありますことをご了承ください。詳細は、各フォルダのREADME を確認してください。
| **カテゴリ**           | **コンテンツ名**                                         | **概要**                                                                                              |
|-------------------------|---------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| Intro Examples          | `examples.ncs/getting-started/using-ncs/0-hello-world`  | NSOの基本操作を解説。ディレクトリ構造やCLI/JSON-RPCベースのWeb UIの使用方法。                            |
| Intro Examples          | `examples.ncs/development-guide/cdb-yang`               | CDBデータベースの拡張とYANGモデルの構築をスクリプトで実装。                                             |
| Intro Examples          | `examples.ncs/development-guide/basic-automation`       | Pythonを使った基本的なネットワーク自動化のスクリプト例。                                                 |
| Intro Examples          | `examples.ncs/development-guide/creating-service`       | サービス作成の基礎を解説したスクリプト例。DNS構成サービスが例として使用されている。                           |
| Intro Examples          | `examples.ncs/development-guide/applications-nso`       | デバイス数カウントのアクションを実装する例。サービス構築の基礎を解説。                                      |
| Intro Examples          | `examples.ncs/development-guide/nano-services/netsim-sshkey` | Nanoサービスを用いた段階的プロビジョニング（Reactive FASTMAP）の例。                                        |
| Intro Examples          | `examples.ncs/development-guide/nano-services/basic-vrouter` | Nanoサービスを用いた基本的なvRouterプロビジョニングの例。                                                 |
| Intro Examples          | `examples.ncs/development-guide/concurrency-model/retry` | トランザクションコンフリクトを楽観的並行性で処理する方法の例。                                               |
| Intro Examples          | `examples.ncs/development-guide/concurrency-model/perf-trans` | トランザクションを並列に処理しパフォーマンスを最適化する方法の例。                                           |
| Intro Examples          | `examples.ncs/development-guide/concurrency-model/perf-zbfw` | Zone-Based Firewall構成を例にした並列処理の活用方法を解説。                                                 |
| Device Management       | `examples.ncs/getting-started/developing-with-ncs/0-router-network` | NSOのネットワークシミュレータを利用したデバイス管理とテスト方法。                                             |
| Device Management       | `examples.ncs/getting-started/using-ncs/1-simulated-cisco-ios` | シミュレートされたCisco IOSルーターの管理方法。                                                          |
| Device Management       | `examples.ncs/getting-started/using-ncs/2-real-device-cisco-ios` | CLI NEDを使用したCisco IOSルーターの管理方法。                                                           |
| Device Management       | `examples.ncs/getting-started/using-ncs/3-real-device-juniper` | NETCONF NEDを使用したJuniperルーターの管理方法。                                                         |
| Device Management       | `examples.ncs/getting-started/using-ncs/4-netconf-device` | NETCONFデバイスをYANGモデルで管理する方法。                                                              |
| Device Management       | `examples.ncs/snmp-ned/basic`                          | SNMP対応デバイスを管理する方法を解説した例。                                                              |
| Device Management       | `examples.ncs/generic-ned/xmlrpc-device`               | 独自プロトコルでデバイスを管理するNED実装例。                                                              |
| Device Management       | `examples.ncs/getting-started/developing-with-ncs/3-aggregated-stats` | デバイスから得られる状態データを高レベルに集約するJavaアプリケーション例。                                     |
| Service Management      | `examples.ncs/getting-started/developing-with-ncs/4-rfs-service` | リソース対応サービス(RFS)をJavaで実装する方法。                                                            |
| Service Management      | `examples.ncs/service-provider/mpls-vpn`               | MPLSネットワークにおけるLayer 3 VPNサービスの構築と管理を解説。                                             |
| Service Management      | `examples.ncs/service-provider/mpls-vpn-new-template`  | テンプレート駆動でMPLS VPNサービスを実装する方法。                                                         |
| Layered Services        | `examples.ncs/getting-started/developing-with-ncs/22-lsa-single-version-deployment` | 単一バージョンでのLSAクラスタのデプロイメント方法を解説。                                                  |
| Layered Services        | `examples.ncs/service-provider/mpls-vpn-layered-service-architecture` | MPLS VPNサービスをLSAで再構築した例。                                                                     |
| Layered Services        | `examples.ncs/getting-started/developing-with-ncs/28-lsa-multi-version-deployment` | 異なるバージョンのノードを含むLSAクラスタのデプロイメント例。                                               |
| Northbound Interfaces   | `examples.ncs/getting-started/developing-with-ncs/13-restconf` | RESTCONF APIの利用方法を示した例。                                                                         |
| High-Availability       | `examples.ncs/development-guide/high-availability/basic` | プライマリとセカンダリノードを設定する高可用性マネージャーの使用例。                                           |
| High-Availability       | `examples.ncs/development-guide/high-availability/cluster` | 3ノードのクラスタを構築し、フェイルオーバーを管理する方法。                                                  |
| High-Availability       | `examples.ncs/high-availability/raft-cluster`          | RAFTアルゴリズムを使用したHAクラスタの初期セットアップ例。                                                 |
| Extension APIs          | `examples.ncs/getting-started/developing-with-ncs/9-alarms` | JavaのAlarmSinkCentralを用いたアラーム送信方法。                                                            |
| Extension APIs          | `examples.ncs/getting-started/using-ncs/7-scripting`   | CLIコマンドやポリシースクリプト、コールバックの追加方法を解説。                                               |
| Extension APIs          | `examples.ncs/development-guide/commit-parameters`     | コミットパラメータ（例: dry-run）の検出と適用方法を示した例。                                                |
| Miscellaneous           | `examples.ncs/getting-started/developing-with-ncs/19-locks-and-timeouts` | NSO実行時のタイムアウトやロックの問題に対処する方法。                                                        |

<a id="anchor10"></a>
# :santa: [dCloud](https://dcloud.cisco.com/)
[dCloud](https://dcloud.cisco.com/) は、シスコの製品やソリューションを手軽に体験頂けるように、シスコがパートナー様、一般ユーザ様に無償で提供しているクラウドデモ環境です。シスコアカウント(CCO ID)を持つ方であれば、いつでもアクセス可能です。

下記のように、Cisco の他の製品（例えば Crosswork Network Controller(CNC)）とのインテグレーションについて手を動かして学びたいという方におすすめです。導入を検討されている機器や製品に関して、借用や検証環境構築の時間や手間をかけずに、ハンズオンを行える点がメリットです。一部のコンテンツはシスコパートナー権限を持つCCO IDのみアクセス可能となります。

詳しい利用方法に関しては、[シスコのクラウドデモ環境「dCloud」を活用してみませんか？](https://qiita.com/mekawaba/items/fa85099ff58ef0d0dd58)をご参照ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/614f37f7-6f31-6f0b-e2ca-082e7a7984ad.png)


<a id="anchor11"></a>
# :santa: その他のお役立ちリンク
## [NSO Documentation](https://cisco-tailf.gitbook.io/nso-docs)
[NSO Documentation](https://cisco-tailf.gitbook.io/nso-docs)は、NSOの公式ドキュメントページです。最近、DevNetから移動し、刷新されました。NSOバージョン6.4からは、こちらのgitbookのみの対応となっておりますので、ご注意ください。

右上の「Ask or Search」は、AIアシスタント機能があり、下記のように質問への回答を生成してくれます。

![Screenshot 2024-12-08 at 20.12.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/0a4552e4-fc5b-eb26-c49b-b288a673ee93.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/68917763-a1aa-ac65-b328-f9162a17d65a.png)


## [NSO Developer Hub](https://community.cisco.com/t5/nso-developer-hub-discussions/bd-p/5672j-disc-dev-nso)
[NSO Developer Hub](https://community.cisco.com/t5/nso-developer-hub-discussions/bd-p/5672j-disc-dev-nso)は、NSOエキスパートや他の開発者と直接コミュニケーションが可能なコミュニティプラットフォームです。技術的な質問や問題解決のためのディスカッションが行われ、蓄積された過去の議論も参照することができます。


## [Ask The Experts (ATX)](https://community.cisco.com/t5/-/-/ta-p/4888277#toc-hId-720089768)
Cisco Customer Success では、[Ask The Experts (ATX)](https://community.cisco.com/t5/-/-/ta-p/4888277#toc-hId-720089768) というウェビナーを定期的に開催しています。下記のような NSO の導入・運用に役立つ情報を発信しています。過去ATXの録画と資料も公開していますので、ぜひご参照ください。

ATX 今後のスケジュール: http://cs.co/9009PR7tb
ATX 過去セッションの録画と資料: http://cs.co/9005PR7l7

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/3a8e1927-f324-756e-46ee-76e98310104e.png)


<a id="anchor12"></a>
# :santa: 最後に

今回は、NSO 学習リソースをまとめてみました。ご覧頂いたように、初心者向けだけでなく上級者向けのコンテンツもございます。ほとんど全て無償でご利用いただけますので、ぜひご活用ください。

また、来年１月２９日（水）に第3回NSOユーザ会を実施します！

NSOをご利用頂く皆様同士の意見交換会や初中級者向けハンズオンも実施しますので、ぜひご参加ください！
参加費無料、現地参加のみ（当日録画なし）となります。

お申し込みページ（1月22日(水) 17時〆切）
https://ciscocx.qualtrics.com/jfe/form/SV_0oz1ANbmrxHVkvs

![第３回 Cisco NSOサクセスコミュニティ案内状.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/866139/01eb6293-ce5d-af44-8d2d-4a5d67b89cb7.png)


<a id="anchor13"></a>
# :santa: 免責事項

本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。