ネットワークエンジニアにとってのプログラミングの必要性について、現在の状況と今後のキーワードを交えて説明します。また、プログラミングスキルを身に付けることによって、具体的に何ができるのかを紹介します。
ネットワークエンジニアがプログラミングを学ぶ際の「おすすめ言語」と「学習方法」については、下記を参照してください。
【結論】現状は必須ではないが、将来的には必要になる可能性が高い
現状は必須ではない
ネットワークエンジニアになるためには、プログラミングは必要ありません。まずはネットワークの基礎知識をしっかりと身に付ける必要があります。勉強するのであれば、CCNAの取得を目指しましょう。
ネットワークエンジニアになった後も、通常の業務であれば、プログラミングは必須ではありません。ただし、「エクセルマクロ(VBA)」や「Teratermマクロ」など、業務上で利用するツールの作成・改修のために、プログラミングが出来たほうがよいです。
ネットワークエンジニアが良く利用するツール
「エクセルマクロ(VBA)」や「Teratermマクロ」だけではなく、「Python」や「JavaScript」などのプログラミング言語を覚えると、業務の幅が格段に広がります。
今後のキーワード
詳細は後述しますが、以下のようなキーワードで、ネットワークエンジニアにもプログラミングスキルを求められる場面が増えています。
- ネットワーク仮想化
- ネットワークリソースをハードウェアではなく、ソフトウェアで提供する技術(例:SDN)
- ネットワーク自動化
- ネットワークデバイスの構成管理、運用、導入などを自動化(例:Ansible)
- Infrastructure as Code (IaC)
- ネットワークやサーバーなどのインフラリソースを「コード」で管理する考え方
- Cisco機器でPythonが動作する
- Cisco IOS XE では、デフォルトでPythonが動作する
- CCNPの出題範囲にプログラミングが追加
- 2020年2月に改定されたCCNP(ENCOR)では、Pythonの問題が出題される
キーワード関連の書籍 ※画像はAmazonへのリンク
プログラミングが出来た方が良い理由
業務の効率化ができる
プログラミングの基本は、「繰り返し処理」と「条件分岐処理」です。
日々の仕事の中で、定期的に同じことを行う作業については、プログラミングにより効率的に実施できる可能性が高いです。また、「〇〇の場合は、△△という処理をする」という作業条件がある場合も、簡単に実装することができます。
自分で便利ツールを作れると楽しい
プログラミングスキルを身に付け、自分で便利ツールを作れるようになると、業務が楽しくなります。
既成のソフトウェアでは費用が高かったり、細かいところが思い通りに動かないことも多いです。自分で作成したツールに関しては、自由にカスタマイズもできるため、思った通りの動作をさせることができます。
自分だけが使うツールであれば、エラーが発生した時の処理を気にする必要が無いため、気軽に開発を行うことができるのも大きなメリットです。
何ができる? – 具体的なプログラミング例 –
PythonとJavaScriptを利用した具体的なプログラミングの例をいくつか紹介します。
Pythonを利用したネットワーク機器の操作
Pythonを利用すると、Ciscoなどのネットワーク機器を操作することができます。設定情報の取得はもちろん、設定変更も自動で行うことができます。
監視システムの構築(AWSを利用した自動電話通知)
AWS上でも、コードを実行できるサービス(Lambda – ラムダ)があり、Pythonを利用することができます。LambdaでのPythonコードとAWSサービスを組み合わせることにより、監視システム(自動電話)を構築することができます。
サブネットマスク計算ツール(JavaScript)
サブネットマスクを計算するツールは多くありますが、JavaScriptを利用することで、自分なりにカスタマイズしたWebアプリを作ることができます。
本サイトで公開している下記のツールは、IPアドレスとプレフィックス値を入力すると、リアルタイムでサブネットマスクやワイルドカードマスクを計算するツールです。このツールは、JavaScriptのみで作成しています。(HTMLとCSSについては、基本的な知識だけで作成可能です。)
トラフィックグラフ表示ツール(JavaScript)
SNMPGetで取得したトラフィック情報を、Webブラウザ上でグラフ表示するツールです。このツールも、JavaScriptのみで作成しています。
将来的にプログラミングスキルを求められる理由
ネットワーク仮想化
2011年頃からネットワーク仮想化として、SDN(Software Defined Network)が利用され始めました。
SDNを実現するための技術として、「OpenFlow」があります。OpenFlowでは、スイッチをコントロールするためにPythonなどのプログラミング言語が利用できます。
OpenFlowの例
ネットワーク概要図
コントローラのプログラミング(Python)
HOST1_IPADDR = "192.168.100.1"
HOST2_IPADDR = "192.168.100.2"
if dstip_str == HOST1_IPADDR or dstip_str == HOST2_IPADDR:
self.write_flooding_rule(etherframe, dpid, buffer_id, inport) #条件に合致した場合は、転送を許可する
ネットワーク自動化
ネットワークの大規模化や複雑化に伴い、ネットワークの「自動化」も重要なキーワードとなっています。ネットワークの自動化により、様々な効果が期待できます。
ネットワーク自動化の効果の例
- 人為的ミスの減少 → 信頼性の向上
- 作業時間の短縮 → インフラ構築・改修のリードタイム短縮
- 繰り返し作業の簡略化 → 運用コストの最適化
- 構成管理ツールの利用 → 構成要素の可視化
自動化はネットワーク仮想化とも相性がよく、仮想環境を効率的に利用するためにも利用されます。
ネットワークの運用管理にも利用できる構成管理ツールとして「Ansible」があります。Ansibleの利用例に関しては下記を参照してください。
Infrastructure as Code
SDNによるネットワークの仮想化と同時期に、AWSをはじめとするパブリッククラウドが台頭し、「仮想化」はネットワーク分野でも重要なキーワードとなりました。その中で、「Infrastructure as Code」という考え方が提唱されました。
「Infrastructure as Code」とは、直訳すると「コードとしてのインフラ」という意味です。これは、ソフトウェア開発だけではなく、インフラ構築・管理にもコード(プログラミング)を適用するという考え方です。
一例として、AWSのCloudFormation(クラウドフォーメーション)によるインフラ構築があります。
下記は、サイト間VPNを構築するためのコードです。このコードを記載してコマンドを実行するだけで、VPNの構築や削除が簡単に行えます。また、パラメータを変えれば同様の環境を複数作成することも可能です。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
# VPNConnection
VPNConnection1:
Type: AWS::EC2::VPNConnection
Properties:
Type: ipsec.1
StaticRoutesOnly: true
VpnTunnelOptionsSpecifications:
- TunnelInsideCidr: 169.254.XXX.XXX/30 ※トンネル1の内部 IPv4 CIDR
PreSharedKey: ******************************** ※トンネル1の事前共有キー
CustomerGatewayId: cgw-xxxxxxxxxxxxxxxxx ※カスタマーゲートウェイID
VpnGatewayId: vgw-xxxxxxxxxxxxxxxxx ※仮想プライベートゲートウェイID
Tags:
- Key: Name
Value: aws-vpn-test
VPNConnectionRoute1:
Type: AWS::EC2::VPNConnectionRoute
Properties:
DestinationCidrBlock: 192.168.1.0/24
VpnConnectionId:
!Ref VPNConnection1
VPNConnectionRoute2:
Type: AWS::EC2::VPNConnectionRoute
Properties:
DestinationCidrBlock: 172.16.0.0/24
VpnConnectionId:
!Ref VPNConnection1
詳細については、下記のページを参照してください。
Cisco機器でPythonが動作する
Cisco IOS XE では、Pythonがサポートされるようになりました。Cisco公式として、「プログラミングにより機器の制御が可能」ということを示していると言えます。
下記は、Ciscoのルーター上でPythonを利用してループバックインターフェースを作成している動画です。
CCNPの出題範囲にプログラミングがある
2020年2月に改定されたCCNP(ENCOR)では、Automation(自動化)という出題範囲があります。その中で、Pythonをはじめとするプログラミング関連の問題が出題されるようになりました。
CCNP(350-401 ENCOR)の出題範囲抜粋
6 Automation
6.1 Interpret basic Python components and scripts
→ Pythonの基本要素およびスクリプトの解釈6.2 Construct valid JSON encoded file
→ 有効なJSONエンコードファイルの作成6.3 Describe the high-level principles and benefits of a data modeling language, such as YANG
→ YANGなどのデータモデリング言語のハイレベルの原理と利点6.4 Describe APIs for Cisco DNA Center and vManage
→ Cisco DNA Center および vManage のAPIの説明6.5 Interpret REST API response codes and results in payload using Cisco DNA Center and RESTCONF
→ Cisco DNA Center および RESTCONF を使用したペイロード内の REST APIのレスポンスコードおよび結果の解釈6.6 Construct EEM applet to automate configuration, troubleshooting, or data collection
→ 設定、トラブルシューティング、データ収集を自動化するための EEM アプレットの作成6.7 Compare agent vs. agentless orchestration tools, such as Chef, Puppet, Ansible, and SaltStack
→ エージェントとエージェントレスオーケストレーションツールの比較(Chef、Puppet、Ansible、および SaltStack)6.3 Describe the high-level principles and benefits of a data modeling language, such as YANG
350-401 ENCOR Exam Topics
→ YANGなどのデータモデリング言語のハイレベルの原理と利点
まとめ
ネットワークエンジニアにとってのプログラミングの必要性について説明しました。ネットワークエンジニアもプログラミングスキルを身に付けると、様々なことが行えるようになります。
- 業務の効率化を行うことができる
- 手作業を減らすことにより、品質向上が期待できる
- 便利ツールを開発することができ、業務の幅が広がる
- ネットワーク仮想化や”Infrastructure as Code”に柔軟に対応できる
インフラ設計・構築からシステム開発までを対応できるエンジニアを「フルスタックエンジニア」と呼ぶことがあります。ネットワークエンジニアのキャリアパスについては、下記を参照してください。
- Progate 〜 プログラミングの入門なら基礎から学べるProgate[プロゲート]
- ドットインストール 〜 3分動画でマスターできるプログラミング学習サービス
どちらのサイトも無料で学習可能な範囲があります。有料コンテンツに関しては、月額1000円程度です。