ネットワーク自動化とプログラマビリティ

―次世代ネットワークエンジニアのためのスキルセット

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
632
ISBN
978-4-87311-981-6
原書
Network Programmability and Automation
FORMAT
Print PDF EPUB
Ebook
4,290円
Ebookを購入する
Print
4,290円

本書はネットワーク自動化とプログラマビリティにフォーカスした解説書で、ネットワークエンジニアの業務を「より効率良く」「より生産的に」進化させるためのエッセンスが詰まったノウハウ集です。ネットワーク運用業務(ネットワーク装置のコンフィグレーションやトポロジー管理、サービス死活監視など)をどのように効率化・自動化させるかという観点から、次世代ネットワークエンジニアが知るべきすべての側面を網羅的に解説します。Pythonを用いたプログラミングの基本から、Linuxの操作、データモデル、Gitによる管理、実践的な自動化ツールの解説まで幅広く扱います。

目次

目次
賞賛の声
監訳者まえがき
はじめに

1章 ネットワーク業界の動向
    1.1 SDNの登場
        1.1.1 OpenFlow
        1.1.2 SDNとは
    1.2 まとめ

2章 ネットワークの自動化
    2.1 ネットワークを自動化する意義
        2.1.1 シンプルなアーキテクチャーを目指す
        2.1.2 予測可能な結果を得る
        2.1.3 ビジネスの即応性を得る
    2.2 さまざまなネットワーク自動化
        2.2.1 ネットワーク装置のプロビジョニング
        2.2.2 データ収集
        2.2.3 移行作業
        2.2.4 コンフィグレーション管理
        2.2.5 コンプライアンス対応
        2.2.6 レポート作成
        2.2.7 トラブルシューティング
    2.3 SNMPから APIへのマネジメントプレーンの進化
        2.3.1 API
        2.3.2 オープンネットワーキングの影響
    2.4 SDN時代のネットワーク自動化
    2.5 まとめ

3章 Linux
    3.1 ネットワーク自動化と Linuxの関係
    3.2 Linuxの歴史
    3.3 Linuxディストリビューション
        3.3.1 RHEL、Fedora、CentOS
        3.3.2 Debian、Ubuntuとその派生
        3.3.3 その他のLinuxディストリビューション
    3.4 Linuxの操作
        3.4.1 ファイルシステムの移動方法
        3.4.2 ファイルやディレクトリの操作
        3.4.3 プログラムの実行
        3.4.4 デーモンの操作
    3.5 Linuxにおけるネットワーク管理
        3.5.1 インタフェースの操作
        3.5.2 ホストマシンとしてのルーティング
        3.5.3 ルーターとしてのルーティング
        3.5.4 ブリッジ(スイッチ)
    3.6 まとめ

4章 ネットワークとPython
    4.1 ネットワークエンジニアがプログラミングを学ぶ理由
    4.2 Pythonインタプリタの利用
    4.3 Pythonのデータ型を理解する
        4.3.1 文字列
        4.3.2 数値
        4.3.3 真偽値
        4.3.4 リスト
        4.3.5 ディクショナリ
        4.3.6 セットとタプル
    4.4 条件分岐ロジックを追加する
    4.5 コンテインメント(in演算子)
    4.6 ループ
        4.6.1 whileループ
        4.6.2 forループ
    4.7 関数
    4.8 ファイル操作
        4.8.1 ファイルからの読み込み
        4.8.2 ファイルへの書き込み
    4.9 Pythonプログラムの作成
        4.9.1 Pythonスクリプトの作成
        4.9.2 シバン
        4.9.3 Pythonインタプリタからの Pythonスクリプトへの移行
    4.10 モジュール
    4.11 Pythonスクリプトに引数を渡す
    4.12 pipを使った Pythonパッケージのインストール
    4.13 その他Pythonに関するヒントや情報
    4.14 まとめ

5章 データフォーマットとデータモデル
    5.1 データフォーマット(データ形式)とは
        5.1.1 データの型
    5.2 YAML
        5.2.1 YAMLの基礎
        5.2.2 Pythonでの YAMLの処理
        5.2.3 YAMLにおけるデータモデル
    5.3 XML
        5.3.1 XMLの基礎
        5.3.2 XSDを使ったデータモデルの定義
        5.3.3 XSLTを使った XMLの変換
        5.3.4 XQueryを使った XMLの探索
    5.4 JSON
        5.4.1 JSONの基礎
        5.4.2 Pythonを使ったJSONデータの処理
        5.4.3 データモデルのための JSONスキーマ
    5.5 YANGを使ったデータモデル
        5.5.1 YANGの概要
        5.5.2 YANGの詳細
    5.6 まとめ

6章 ネットワーク設定のテンプレート
    6.1 テンプレート言語の登場
        6.1.1 Web開発におけるテンプレートの利用
        6.1.2 テンプレート利用の拡張
    6.2 ネットワーク自動化におけるテンプレート利用の価値
    6.3 Jinjaを使ったネットワーク設定のテンプレート
        6.3.1 Jinjaを選ぶ理由
        6.3.2 Jinjaテンプレートへのデータの挿入
        6.3.3 Pythonを使った Jinjaテンプレートからの出力
        6.3.4 条件分岐とループ
        6.3.5 Jinjaのフィルター機能
        6.3.6 Jinjaにおけるテンプレートの継承
        6.3.7 Jinjaにおける変数の作成
    6.4 まとめ

7章 ネットワークAPI
    7.1 ネットワーク APIを理解する
        7.1.1 HTTPベースの API
        7.1.2 NETCONF
    7.2 ネットワーク APIの利用
        7.2.1 HTTPベース APIの利用
        7.2.2 NETCONF
    7.3 ネットワーク APIを使った自動化
        7.3.1 requestsライブラリ
        7.3.2 ncclientライブラリを利用する
        7.3.3 netmiko
    7.4 まとめ

8章 Gitによるソースコード管理
    8.1 ソースコード管理のユースケース
    8.2 ソースコード管理のメリット
        8.2.1 変更の追跡
        8.2.2 説明責任
        8.2.3 プロセスとワークフロー
    8.3 ネットワークをソースコード管理することのメリット
    8.4 Gitとは
        8.4.1 Gitの歴史
        8.4.2 Gitに関連する用語
        8.4.3 Gitのアーキテクチャー概要
    8.5 Gitの操作
        8.5.1 Gitのインストール
        8.5.2 リポジトリの作成
        8.5.3 リポジトリへのファイルの追加
        8.5.4 リポジトリへの変更のコミット
        8.5.5 既存ファイルへの変更とコミット
        8.5.6 対象ファイルのステージングの解除
        8.5.7 リポジトリからのファイルの除外
        8.5.8 リポジトリに関する情報の取得
        8.5.9 異なるバージョン間でのファイルの差分を表示する
    8.6 ブランチ
        8.6.1 ブランチの作成
        8.6.2 ブランチのチェックアウト
        8.6.3 ブランチのマージと削除
    8.7 Gitを使った共同作業
        8.7.1 Gitを使った複数のマシン間での共同作業
        8.7.2 Gitベースのオンラインサービスを使った共同作業
    8.8 まとめ

9章 自動化ツール
    9.1 自動化ツールの概要
    9.2 Ansible
        9.2.1 Ansibleの仕組み
        9.2.2 インベントリファイルの作成
        9.2.3 Playbookの実行
        9.2.4 変数ファイル
        9.2.5 ネットワーク自動化のための Playbook
        9.2.6 Ansibleのサードパーティーモジュール
        9.2.7 Ansibleのまとめ
    9.3 Saltによる自動化
        9.3.1 Saltのアーキテクチャー
        9.3.2 Saltの基本的な概念
        9.3.3 Saltによるネットワークコンフィグレーションの管理
        9.3.4 Saltのリモート実行
        9.3.5 Saltによるイベント駆動型のインフラストラクチャー
        9.3.6 Saltのその他の機能
        9.3.7 Saltのまとめ
    9.4 StackStormによるイベント駆動型のネットワーク自動化
        9.4.1 StackStormの概念
        9.4.2 StackStormのアーキテクチャー
        9.4.3 アクションとワークフロー
        9.4.4 センサーとトリガー
        9.4.5 ルール
        9.4.6 StackStormのまとめ
    9.5 まとめ

10章 継続的インテグレーション
    10.1 知っておくべきこと
        10.1.1 Simple Is Better
        10.1.2 人間とプロセスとテクノロジー
        10.1.3 プログラミングの学習
    10.2 継続的インテグレーションの背景
        10.2.1 継続的インテグレーションの概要
        10.2.2 継続的デリバリー
        10.2.3 テスト駆動開発
        10.2.4 ネットワークで継続的インテグレーションを導入する理由
    10.3 ネットワークにおける継続的インテグレーションのパイプライン
        10.3.1 ピアレビュー(同僚によるレビュー)
        10.3.2 ビルド自動化
        10.3.3 テスト環境・開発環境・ステージング環境
        10.3.4 デプロイツール
        10.3.5 テストツールとテスト駆動型ネットワーク自動化
    10.4 まとめ

11章 ネットワーク自動化に取り組むための文化の構築
    11.1 組織的な戦略と柔軟性
        11.1.1 旧時代の組織に対する変革
        11.1.2 経営陣から支持を得ることの重要性
        11.1.3 自作か購入か
    11.2 失敗を許容する
    11.3 スキルと教育
        11.3.1 未知の事柄を学ぶ
        11.3.2 基礎知識を学ぶことに注力する
        11.3.3 資格試験は必要?
        11.3.4 自動化はエンジニアの仕事を奪うのか?
    11.4 まとめ

付録A Linuxにおける高度なネットワーク操作
    A.1 macvlanインタフェース
        A.1.1 macvlanインタフェースの利用例
        A.1.2 macvlanインタフェースの作成、設定、削除
    A.2 仮想マシンにおけるネットワーク
        A.2.1 Linuxブリッジ
        A.2.2 macvtapインタフェース
    A.3 ネットワーク名前空間
        A.3.1 ネットワーク名前空間の利用例
        A.3.2 ネットワーク名前空間の作成と削除
        A.3.3 ネットワーク名前空間へのインタフェースの割り当て
        A.3.4 ネットワーク名前空間の中でコマンドの実行
        A.3.5 vethペアを使った異なるネットワーク名前空間の相互接続
    A.4 Linuxコンテナのネットワーク
        A.4.1 LXCのネットワーク設定
        A.4.2 Dockerのネットワーク設定
    A.5 Open vSwitch
        A.5.1 OVSのインストール
        A.5.2 OVSの設定
        A.5.3 OVSとワークロードの接続

付録B NAPALM
    B.1 NAPALMによるコンフィグレーションの管理
        B.1.1 コンフィグレーションの置換
        B.1.2 コンフィグレーションのマージ
    B.2 NAPALMを使ったデータの取得
    B.3 NAPALMと他の Pythonプロジェクトとの統合
        B.3.1 Ansibleからの NAPALMの利用
        B.3.2 Saltからの NAPALMの利用
        B.3.3 StackStormからのNAPALMの利用

索引