Instiq
第5章 · インフラと自動化·v1.0.0·更新 2026/7/20·読了目安 約16分

変更要約: 初版

5.2テスト・CI/CDと自動化ツール

この節の要点

ネットワーク変更を安全に流すためのCI/CDパイプライン(lint→テスト→デプロイ)、仮想環境で試すCisco Modeling Labs(CML)と状態を検証するpyATS、そしてAnsible(エージェントレス・冪等)・Terraform(宣言的・状態管理)・Cisco NSO(マルチベンダ・サービスモデル)の得意分野を、「このパイプライン段は何を守っているか」「この要件にはどのツールか」という判断として学びます。

自動化は「間違った設定を、より速く・より広く配る」危険も併せ持ちます。だからこそ、変更を本番へ届ける前に機械的に検証する仕組み(テストとパイプライン)が要ります。この節では、ネットワーク変更を安全に運ぶCI/CDの各段が何を守っているのか、仮想環境CMLとテストフレームワークpyATSの役割、そしてAnsibleTerraformNSOをそれぞれ「何が得意か」で選ぶ判断を、道具比較の暗記でなく要件との突き合わせとして整理します。

5.2.1CI/CDパイプラインの段

  • CI(継続的インテグレーション)=変更をコミット/Pull Requestするたびに自動でビルド・検査・テストを走らせ、壊れた変更を早期に弾く仕組み。ネットワークでは、まずyamllint等のlint(構文/書式検査)で「そもそも文法が正しいか」を機械確認する段が入る。ここで落ちれば本番に届く前に止まる。
  • CD(継続的デリバリ/デプロイ)=テストを通過した変更を自動で(あるいは承認後に)本番へ配布する段。典型的な順序はlint → 仮想環境でテスト → 承認 → 本番デプロイ → 事後検証。各段は「前段を通ったものだけ次へ」進むゲートであり、どこで落ちたかが原因の切り分けになる。

5.2.2テストの道具:CMLとpyATS

  • Cisco Modeling Labs(CML)=実機さながらの仮想ネットワークをシミュレートする環境。パイプラインの「テスト段」で、本番と同じトポロジをCML上に作り、変更を本番の前に安全に試す(サンドボックス)。物理機材を用意せずに検証でき、壊しても本番に影響しない。
  • pyATS(+Genie)=Cisco製のネットワークテスト自動化フレームワーク。機器のshow出力を構造化データにパースし、「BGPネイバがEstablishedか」「インタフェースがupか」といった期待状態を機械的に検証(アサーション)する。変更前後の状態を比較して回帰(想定外の劣化)を検出するのに使う。

5.2.3構成/オーケストレーションの道具

  • Ansibleエージェントレス(対象に常駐ソフト不要・主にSSH/API)で、YAMLのplaybookに「望む状態」を書いてpush型で適用する構成管理ツール。多くのモジュールが冪等に作られ、ネットワーク機器(ios_config等)の設定・取得に広く使われる。学習/導入が比較的容易。
  • Terraform宣言的にインフラを定義し、状態ファイル(state)で「今作ってあるもの」を追跡して差分だけを適用するプロビジョニングツール。クラウド資源やインフラの作成/破棄のライフサイクル管理に強い。「あるべき姿」と「実体」の差分管理(plan/apply)が中核。
  • Cisco NSO(Network Services Orchestrator)マルチベンダのネットワークをサービスモデルとして抽象化し、「L3VPNを一本作る」といった上位の意図を配下の各機器設定へ翻訳・配布・整合するオーケストレータ。多ベンダ・大規模のサービス提供と継続的な整合維持に強い。
試験ポイント

「CI/CD=lint→CMLでテスト→承認→本番→事後検証のゲート」「CML=仮想ネットワークで本番前に安全に試す」「pyATS=show出力を構造化し期待状態を検証(回帰検出)」「Ansible=エージェントレス/YAML/push/冪等」「Terraform=宣言的/状態管理/プロビジョニング」「NSO=マルチベンダのサービスモデル・オーケストレーション」が頻出です。各ツールを得意分野で選び分けましょう。

あるチームのCI/CDパイプラインは、Gitへの変更提案(Pull Request)ごとに次の順で動きます:(1) yamllint で playbook の書式検査 → (2) CML 上に本番同型のトポロジを起動し変更を適用 → (3) pyATS で「全BGPネイバがEstablished」「対象IFがup」を検証 → (4) 人の承認 → (5) 本番へ Ansible で適用 → (6) pyATS で本番の事後検証。ある日、あるPRが段(3)で失敗して止まりました。ログを読むと、CMLに変更を当てた後の検証で「ある拠点のBGPネイバがIdleのまま」だったのです。ここで重要なのは、この失敗はパイプラインの故障ではなく、むしろパイプラインが本来の仕事をした証だという解釈です。もしこの検証段が無ければ、その設定ミスは本番の全拠点へ配布され、実際にBGPが落ちてから気づくことになりました。段(3)(CML+pyATS)は「本番に触れる前に、仮想環境で期待状態を機械検証する安全網」であり、どの段で落ちたかが原因の所在を教えてくれます——段(1)なら文法、段(3)なら振る舞い、段(6)なら本番固有の差分、という具合です。もしこのチームが「速く出したいから検証段を飛ばそう」と考えたら、それは自動化の危険(誤設定を速く広く配る)を最大化する判断であり、本末転倒です。ツール選定も同様に得意分野で決まります:機器へ冪等に設定を配る本体はAnsible、期待状態の検証はpyATS、仮想の試験場はCML、もし多ベンダのサービス(L3VPN等)を抽象化して回すならNSOが中核になります。

道具役割/得意分野選ぶ場面
Ansibleエージェントレス・YAML playbook・push・冪等な構成管理機器へ設定を冪等に配布/取得したい
Terraform宣言的・状態管理・作成/破棄のプロビジョニング(クラウド)資源のライフサイクルを管理したい
Cisco NSOマルチベンダのサービスモデル・オーケストレーション多ベンダのサービスを抽象化し整合維持したい
CML仮想ネットワークのシミュレーション(試験場)本番前に変更を安全に試したい
pyATSshow出力の構造化と期待状態の検証(回帰検出)変更前後の状態を機械検証したい
注意

ひっかけ: 「パイプラインのテスト段でPRが落ちた=自動化の欠陥」は誤りです——それは本番に届く前に誤設定を止めた正常な働きで、どの段で落ちたか(lint=文法/CML+pyATS=振る舞い)が原因の所在を示します。また「Ansibleは対象機器に専用エージェントの常駐が必要」も誤り=Ansibleはエージェントレス(主にSSH/API)です。状態ファイルで資源ライフサイクルを追うのはTerraformの特徴です。

CI/CDの段、CML/pyATS、Ansible/Terraform/NSOの得意分野の図。
どのパイプライン段が何を守るか

5.2.4この節のまとめ

  • CI/CDlint→CMLでテスト→承認→本番→事後検証のゲート列。テスト段での失敗は誤設定を本番前に止めた正常な働き
  • CMLは本番前に安全に試す仮想試験場、pyATSはshow出力を構造化し期待状態を検証(回帰検出)する
  • ツールは得意分野で選ぶ:Ansible(エージェントレス/冪等な構成配布)・Terraform(宣言的/状態管理のプロビジョニング)・NSO(マルチベンダのサービスオーケストレーション)

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. CI/CDパイプラインが `lint → CMLでテスト → 承認 → 本番へAnsible → pyATSで事後検証` の順で動く。あるPRがCMLでのテスト段で「ある拠点のBGPネイバがIdleのまま」と検出されて停止した。この結果の解釈として最も適切なものはどれか。

Q2. 機器へ設定を配布する自動化ツールとして、対象機器に専用エージェントを常駐させたくなく、YAMLで「望む状態」を書いてSSH/API経由で冪等に適用したい。この要件に最も適したツールはどれか。

Q3. 変更適用の前後で「全BGPネイバがEstablished」「対象インタフェースがup」といった期待状態を、機器のshow出力を構造化データにして機械的に検証し、想定外の劣化(回帰)を検出したい。最も適したツールはどれか。

理解度を確認第5章「インフラと自動化」の問題を解く

学習の記録を残しませんか

参考書はすべて無料で読めます。無料登録すると、問題集での演習・既読と進捗の記録・間違えた問題の復習・ハイライトが使えます。