ネットワーク設計と自動化

NAPALM(ネットワーク自動化ライブラリ) なぱーむ

ネットワーク自動化Pythonマルチベンダー設定管理AnsibleNOS
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主なメーカー
iosCisco IOS / IOS-XECisco
iosxrCisco IOS-XRCisco
nxosCisco NX-OSCisco Nexus
junosJunos OSJuniper
eosEOSArista
vyosVyOSコミュニティOSS
panosPAN-OSPalo 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を中心としたネットワーク自動化スタック Ansible napalm_*モジュール SaltStack napalm-saltモジュール Nornir Pythonオーケストレーター NAPALM 統一API(get_* / load_* / commit / rollback) Cisco IOS ios ドライバー Juniper junos ドライバー Arista eos ドライバー Palo Alto panos ドライバー オーケストレーション層 抽象化層(NAPALM) 実機(ネットワーク機器)

類似ツールとの比較

ツール特徴NAPALMとの違い
NetmikoSSHでCLI操作を自動化するPythonライブラリ低レベルなCLI操作に特化。NAPALMはNetmikoを内部で使うこともある
NornirPythonネイティブのオーケストレータータスク実行の制御が役割。NAPALMプラグインと組み合わせて使う
Ansible汎用構成管理ツールNAPALMをモジュールとして呼び出して使う関係
pyATS/GenieCiscoが開発したテスト・自動化フレームワークCisco機器に強いが他ベンダー対応は限定的

関連する規格・RFC

規格・RFC番号内容
RFC 6241NETCONF — NAPALMが一部ドライバーで内部利用するネットワーク設定プロトコル
RFC 8040RESTCONF — HTTPベースのネットワーク設定プロトコル(NAPALMの一部ドライバーで利用)
RFC 7950YANG — ネットワーク設定データモデル記述言語(NAPALMが返すデータ構造の参考規格)

関連用語

  • Netmiko — SSHを使ってCLIベースのネットワーク機器操作を自動化するPyth