IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ
研修コース検索

コラム

Pythonでネットワーク自動化をしよう

CTC 教育サービス

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes 

第48回 Pythonとネットワーク自動化基礎検定 模擬問題解説(10) (小澤昌樹) 2026年8月19日公開

みなさん、こんにちは。

前回は、PythonからREST APIを呼び出す基本として、requests.get()、requests.post()、HTTPヘッダー、JSON、ステータスコードを取り上げました。API連携ができると、ネットワーク機器だけでなく、監視システム、IPアドレス管理、構成管理データベース、クラウドサービスなどとも連携しやすくなります。

ただし実務では、APIを呼べるだけでは不十分です。APIトークンをコードに直接書かないこと、応答がないときにスクリプトを止め続けないこと、HTTPエラーを見落とさないことが重要です。複数の機器やサービスをまとめて処理するネットワーク自動化では、1か所の失敗が全体に影響しやすいためです。

今回は、前回のREST API連携を踏まえ、環境変数による認証情報の扱い、requestsのtimeout、HTTPエラーを例外として扱う方法を確認します。たとえば、夜間バッチで複数拠点の機器情報をAPIから取得するようなケースでは、認証情報の扱いが雑だとセキュリティ事故につながりますし、タイムアウトや例外処理が弱いと、1つのAPI停止で処理全体が止まってしまいます。小さなスクリプトでも、最初から運用を意識した書き方にしておくことが大切です。試験対策としても、実務で安全な自動化を書くためにも、押さえておきたい内容です。

模擬問題

問題1

PythonスクリプトからAPIトークンを利用したい。セキュリティを考慮した扱いとして、最も適切なものはどれか。
 A. APIトークンをソースコード内に文字列として直接書く
 B. APIトークンを環境変数から読み取り、HTTPヘッダーに設定する
 C. APIトークンをコメントとしてコード内に残しておく
 D. APIトークンをURLの末尾に必ず付けて送信する

正解
B

解説
正解はBです。APIトークンやパスワードのような認証情報は、ソースコードに直接書かず、環境変数やシークレット管理の仕組みから読み取るのが基本です。Pythonでは、標準ライブラリの os.environ を使って環境変数を参照できます。


token = os.environ.get("API_TOKEN")

Aは、Gitへのコミットやコード共有を通じてトークンが漏えいする可能性があるため不適切です。Cもコメントなら安全というわけではなく、コード内に残る以上は同じリスクがあります。DのようにURLへトークンを含める方法も、ログや履歴に残りやすいため注意が必要です。

なお、実務では、開発環境、本番環境、CI/CD環境でトークンをどう設定するかまで考えましょう。試験では os.environ.get() の使い方と、認証情報を直書きしない理由を押さえておくことがポイントです。

また、環境変数が設定されていない場合の扱いも重要です。値が None のままAPIを呼び出すと、認証エラーになるだけでなく、動作不良の原因に気づきにくいことがあります。必要な環境変数が存在するかを起動時に確認し、不足していれば分かりやすいメッセージを出す設計にすると、運用時の切り分けが楽になります。

問題2

requests を使ってREST APIを呼び出すスクリプトがある。相手システムから応答が返らない場合に、処理が長時間止まり続けることを防ぎたい。最も適切な指定はどれか。
 A. requests.get(url, timeout=10) のように timeout を指定する
 B. requests.get(url, wait=True) のように wait を指定する
 C. requests.get(url).json(timeout=10) のように .json() に timeout を指定する
 D. time.sleep(10) をAPI呼び出しの前に必ず入れる

正解
A

解説
正解はAです。requests では、get() や post() などのリクエスト送信時に timeout を指定できます。相手APIの応答が遅い、経路に問題がある、APIサーバが停止しているといった場合に、スクリプトが待ち続けることを防げます。


response = requests.get("https://example.com/api/devices", timeout=10)

Bの wait=True は requests の一般的な引数ではありません。Cは指定する場所が誤りです。.json() はレスポンス本文をJSONとして読み取る処理であり、通信の待ち時間を制御するものではありません。Dの time.sleep(10) は処理を止めるだけで、API通信のタイムアウト対策にはなりません。

実務では、timeout の値を短すぎても長すぎても扱いづらくなります。対象APIやネットワーク環境に合わせ、失敗時にはログを残して次の対象へ進める設計にすると、自動化スクリプトを運用しやすくなります。特に、多数の機器を順番に処理する場合、timeout の有無は全体の実行時間に直結します。1台あたりの待ち時間が数十秒違うだけでも、対象が数十台、数百台になると大きな差になりますので注意しましょう。試験では引数名を覚えるだけでなく、なぜネットワーク自動化で必要になるのかも意識するとよいでしょう。

問題3

REST APIを呼び出した結果、HTTPステータスコードが 404 や 500 の場合に、成功時と同じ処理を続けないようにしたい。requests でHTTPエラーを例外として扱う方法として、最も適切なものはどれか。
 A. response.raise_for_status() を呼び出す
 B. response.json() を呼び出せば、HTTPエラーは必ず例外になる
 C. response.status_code = 200 と代入する
 D. requests.get() の戻り値を print() すれば、エラー処理は不要になる

正解
A

解説
正解はAです。response.raise_for_status() は、HTTPステータスコードが 400 番台や 500 番台の場合に HTTPError 例外を発生させるメソッドです。成功時とエラー時の処理を分けたい場合に役立ちます。


response.raise_for_status()

Bは誤りです。.json() はレスポンス本文をJSONとして読み取るための処理で、HTTPステータスコードの成功・失敗を判断するものではありません。Cのように status_code を200へ書き換えるのは、エラーを隠すだけで原因調査を難しくします。Dも表示するだけで、後続処理を止めるかどうかの制御にはなりません。

実務では、raise_for_status()、timeout、例外処理、logging を組み合わせます。たとえばIPAMから機器情報を取得できなかった場合は、対象機器名とエラー内容をログに残し、必要に応じて次の機器へ進むようにします。失敗を無視せず、かつ全体を止めすぎないことが大切です。

まとめ

今回は、REST API連携を実務で使う際に重要になる、APIトークンの扱い、timeout 指定、raise_for_status() によるHTTPエラー処理を簡単に確認しました。

これらは単独で使うだけでなく、組み合わせることで価値を発揮します。環境変数で認証情報を安全に扱い、timeout で待ち続けることを防ぎ、HTTPエラーを例外として検知できるようにすると、自動化スクリプトの信頼性は高まります。

次回は、取得したデータをCSVやExcel、ログファイルとして出力するなど、レポート作成や運用記録に近いテーマを扱う予定です。APIや機器から情報を取るだけで終わらせず、人が確認しやすい形に整えるところまで意識していきましょう。

 

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes