NAPALM(ネットワーク自動化ライブラリ) なぱーむ
簡単に言うとこんな感じ!
NAPALMは、いろんなメーカーのネットワーク機器を「同じやり方」で操作できるPythonライブラリだよ。CiscoでもJuniperでもArista でも、コードを書き換えずにまとめて管理できるってこと!
NAPALMとは
NAPALM(Network Automation and Programmability Abstraction Layer with Multivendor support)は、異なるメーカーのネットワーク機器を統一的なインターフェースで操作するためのPythonライブラリです。Cisco・Juniper・Aristaなど、それぞれ独自のOSや設定方法を持つ機器を、同じPythonコードで扱えるようにする「共通言語」として機能します。
ネットワーク運用では、複数のベンダー機器が混在する「マルチベンダー環境」が一般的です。これまでは機器ごとに異なるコマンドを覚えてCLIで手作業設定するのが当たり前でしたが、NAPALMを使うと設定の取得・変更・検証・差分確認などをプログラムから自動化できます。
特にInfrastructure as Code(IaC) の文脈で活用されており、AnsibleやSaltStackといった構成管理ツールとの連携プラグインも充実しています。「ネットワークをコードで管理する」という文化を広げたツールの一つです。
NAPALMの仕組みと主な機能
NAPALMは「ドライバー」と「統一API」という2層構造で動作します。各ベンダー向けのドライバーが機器との通信を担い、利用者は共通のAPIを呼ぶだけで済みます。
| 機能メソッド | 内容 |
|---|---|
get_facts() | ホスト名・OSバージョン・シリアル番号などの基本情報取得 |
get_interfaces() | インターフェース一覧・状態・速度などの取得 |
get_bgp_neighbors() | BGPネイバー情報の取得 |
load_merge_candidate() | 既存設定に追記する形で設定候補を読み込む |
load_replace_candidate() | 設定全体を置き換える候補を読み込む |
compare_config() | 現在設定と候補設定の差分をテキストで確認 |
commit_config() | 候補設定を実際に適用(コミット) |
rollback() | コミット前の状態に戻す |
get_config() | running/startup/candidateの設定を取得 |
名前の由来
NAPALMという名前は爆発物の「ナパーム」から取られたジョークですが、公式には「Network Automation and Programmability Abstraction Layer with Multivendor support」の頭文字です。「マルチベンダーをまとめて燃やす(統合する)」という意味合いが込められています。
対応しているネットワークOS(NOS)
| ドライバー名 | 対応NOS | 主なメーカー |
|---|---|---|
ios | Cisco IOS / IOS-XE | Cisco |
iosxr | Cisco IOS-XR | Cisco |
nxos | Cisco NX-OS | Cisco Nexus |
junos | Junos OS | Juniper |
eos | EOS | Arista |
vyos | VyOS | コミュニティOSS |
panos | PAN-OS | Palo Alto |
歴史と背景
- 2015年 — David Barroso(Spotify社)とChristiaan Brand(Google社)がOSSとして公開。Spotify社内の大規模マルチベンダー環境での課題を解決するために開発された
- 2015年〜 — GitHub上で急速にコントリビューターが増加。Ansible向けのNAPALMモジュールが整備され、ネットワーク自動化コミュニティで一気に普及
- 2016年 — Network to Codeなどのネットワーク自動化専門会社がサポートに参加し、エコシステムが拡大
- 2017年〜 — AnsibleのコアモジュールにNAPALM統合機能が追加され、エンタープライズでの採用が加速
- 現在 — GitHubのnapalm-automationオーガニゼーション配下で継続的にメンテナンスされており、NetDevOpsの標準ツールの一つとして定着
NAPALMとその周辺ツールの関係
NAPALMは「単体で使う」よりも、他のツールと組み合わせて使うことで真価を発揮します。
類似ツールとの比較
| ツール | 特徴 | NAPALMとの違い |
|---|---|---|
| Netmiko | SSHでCLI操作を自動化するPythonライブラリ | 低レベルなCLI操作に特化。NAPALMはNetmikoを内部で使うこともある |
| Nornir | Pythonネイティブのオーケストレーター | タスク実行の制御が役割。NAPALMプラグインと組み合わせて使う |
| Ansible | 汎用構成管理ツール | NAPALMをモジュールとして呼び出して使う関係 |
| pyATS/Genie | Ciscoが開発したテスト・自動化フレームワーク | Cisco機器に強いが他ベンダー対応は限定的 |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 6241 | NETCONF — NAPALMが一部ドライバーで内部利用するネットワーク設定プロトコル |
| RFC 8040 | RESTCONF — HTTPベースのネットワーク設定プロトコル(NAPALMの一部ドライバーで利用) |
| RFC 7950 | YANG — ネットワーク設定データモデル記述言語(NAPALMが返すデータ構造の参考規格) |
関連用語
- Netmiko — SSHを使ってCLIベースのネットワーク機器操作を自動化するPyth