STAGE 06 / 自動化とSDN

JSONとデータモデル

考えてみよう

REST APIでコントローラから「VLAN一覧」を受け取るとき、その中身はどんな形式で送られてくるのでしょうか?

人間が読むCLIの画面表示とは違い、プログラムが機械的に処理しやすい形式である必要があります。どんな形が都合いいか、少し考えてから読み進めてください。

JSONは「荷物を詰める共通フォーマット」

前回学んだREST APIは、いわば荷物を運ぶ「宅配便の仕組み」でした。今回学ぶJSON(JavaScript Object Notation)は、その荷物を誰でも同じルールで開けられるように詰める「梱包の規格」だと考えてください。人間にも読みやすく、プログラムにも解釈しやすいという特徴から、自動化の世界で標準的に使われています。

JSONの基本構文

JSONは主に3つの要素でできています。

オブジェクト{ } で囲み、「キー」と「値」のペアを : でつなげます。複数のペアは , で区切ります。

{
  "hostname": "SW1",
  "interface": "GigabitEthernet0/1",
  "enabled": true
}

配列[ ] で囲み、複数の値やオブジェクトを並べます。VLANの一覧のように「同じ形のデータが複数ある」場合に使います。

{
  "vlans": [
    { "id": 10, "name": "SALES" },
    { "id": 20, "name": "DEV" }
  ]
}

値には文字列"SW1" のようにダブルクォートで囲む)、数値10)、真偽値true / false)、null、そしてオブジェクトや配列自体も入れられます。名簿アプリの「氏名・年齢・所属」のようなカード情報が、キーと値のペアで整理されているとイメージすると理解しやすいでしょう。

JSONを読み取る練習

先ほどのVLAN一覧の例で、「2番目のVLANの名前」を聞かれたら、配列 vlans の2つ目の要素、つまり { "id": 20, "name": "DEV" } を見て、答えは DEV だとわかります。試験では、このように短いJSONを見せて「特定のキーの値を答えよ」という問題が定番です。慌てずに、外側の { }[ ] の対応関係を目で追いながらキーを探すのがコツです。

確認問題

次のJSONで、interfaces の2番目の要素の status は何でしょう。 ``json { "interfaces": [ { "name": "Gi0/0", "status": "up" }, { "name": "Gi0/1", "status": "down" } ] } ``

答えを見る

答えは down です。interfaces は配列で、1番目が Gi0/0(up)、2番目が Gi0/1(down)です。キーと値の対応を、括弧の階層をたどりながら確認しましょう。

YANG・NETCONF・RESTCONFの概要

JSONのようなデータ形式に加えて、ネットワーク機器の設定・状態をモデル化する技術も押さえておきましょう。YANGは、設定項目やその構造を定義する「データモデルの設計図」です。そして、そのデータをやり取りするプロトコルとしてNETCONF(ポート830、XMLベース)とRESTCONF(ポート443、RESTの考え方をベースにHTTP/JSONやXMLを使う)があります。どちらも「機器の設定を、決まったデータモデルに基づいて自動的にやり取りする」ための仕組みで、CLIを1台ずつ手打ちする作業からの脱却を支えています。

確認問題

NETCONFとRESTCONFが使う代表的なポート番号の組み合わせとして正しいのはどれでしょう?

答えを見る

答えはNETCONFが830、RESTCONFが443です。NETCONFはSSH上で動く独自プロトコルとして830番を使い、RESTCONFはHTTPS(443番)を使ってRESTの考え方でアクセスします。どちらもYANGデータモデルに基づいて機器を操作する点は共通です。

試験でのポイント

CCNAでは、JSONの構文(オブジェクトは{ }、配列は[ ]、キーと値は:で対応)を正確に読み取れるかが問われます。短いJSONのサンプルから特定のキーの値を答えさせる問題が定番なので、括弧の対応関係を丁寧に追う練習をしておきましょう。また、YANG・NETCONF・RESTCONFは深い実装知識までは求められませんが、「YANGはデータモデル、NETCONFとRESTCONFはそれをやり取りするプロトコル」という役割分担と、それぞれのポート番号(830・443)の対応は覚えておくと安心です。

ゆみちゃん
ゆみ

JSONはオブジェクト{}と配列[]でデータを整理する、いわば荷造りのルール。キーと値の対応を落ち着いて追えば、初見でも必ず読める。次はいよいよ、実際に設定を自動化するツールたち、Ansible・Terraform・Puppet・Chefを見ていくよ。