
[AdTech Scala Meetup] Apache Sparkについて情報共有
NetOpsCoding Advent Calendar2016 の12/9分の記事として投稿させて頂きました。
こんにちは。アドテクスタジオでネットワークエンジニアをしている山本 孔明です。アドテクスタジオのプライベートクラウドは少数のインフラメンバーで運営されており、そのためタスクの自動化を押し進めています。本日は、その一部を担う仕組みであるAXCを紹介したいと思います。
自動化と表現するのは語弊があるかもしれません。プライベートクラウドとして必要な操作を簡略化して公開してユーザに操作してもらっている訳ですから、セルフサービス化
と記載した方が正しいかもしれません。弊社では2014年からこのAXCを使ってインフラを運用しています。
さて、タイトルにあるAXCという聞き慣れないキーワードですが、Adtech Studio X Cloud
の略称です。アドテクスタジオは20個以上の広告プロダクトの集合体です。その中の多くの広告プロダクトが利用するプライベートクラウドの変更作業には、多大な労力を伴います。そのため、申請を元にした旧来のインフラ業務を極力減らしセルフサービス化を進めています。今時の言葉を使うと、アジリティ(俊敏性)の向上・インフラエンジニアのオペレーション負荷の軽減効果が見込めます。
以下のように簡素化されたコマンドで実行できるようになっています。
1 2 3 4 5 6 7 8 9 |
PC$ axc nodelist +-----------+-----------+---------+-------------+ | ADDRESS | NAME | SESSION | DESCRIPTION | +===========+===========+=========+=============+ | 10.1.1.1 | web01 | enabled | | +-----------+-----------+---------+-------------+ | 10.2.1.1 | db01 | enabled | | +-----------+-----------+---------+-------------+ |
これがなんで嬉しいの?という点を以下にまとめておきました。
今時の言葉を使うと、アジリティ(俊敏性)の向上・インフラエンジニアのオペレーション負荷の軽減効果が見込めます。
という訳です。
AXCはクライアントサーバモデルになっており、クライアントにはPython製のAXCがインストールされます。AXCはクライアントの入出力の制御とAPIコールの生成を行っており、実際にネットワーク機器を操作するのは図中のAXC API Gateway(以下、API Gateway)です。
先ほどのnodelistを例に挙げると、1と5がAXC、2から4がAPI Gatewayが担っています。
API GatewayはPythonのWEB Application FramewarkであるFlaskを元に作成しています。FLASKは軽量でとても使い勝手が良く、今回の用途(APIをルーティングする)にも適しています。今だと他にはFalconあたりを選定しても良いかもしれません。
なんでAPI Gatewayのようなものが途中にあるのか疑問に思った方もいるかもしれません。理由は以下の通りです。
ネットワーク機器の実装によっては権限の付与について、APIを叩く時はAdmin権限が必要であったり、そもそもパーティショニングの概念がないものも多数あります。クライアント側に多くの情報を持たせるのはセキュリティ上好ましくありません。また、インストールされた全てのAXCに対してバージョンアップを行わずとも、API Gatewayの変更で吸収できるシチュエーションもあるのでユーザ影響のある改修を極力避けるという意味でも活躍してくれています。
API Gatewayはとてもシンプルに作られています。先ほど記載したFlaskを中心として以下のコンポーネントで構成されています。
この範囲内においてはFLASKはとてもシンプルで扱いやすいです。以下が公式から抜粋したサンプルコードです。
1 2 3 4 5 6 7 8 9 10 |
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() |
実際には@app.route
内のPATHを叩いた後に各ネットワーク機器の操作用scriptを呼び出しています。操作用scriptはAPIが用意されているものであればAPIを呼び出し、APIが用意されていなければexpectで力技だったり・・・、複数の設定をまとめる必要がある場合も同様に、エラーハンドリングをしながら必要な処理を実行しています。その辺りの複雑な処理はクライアント側には実装せずAPI Gatewayが担っています。
API GatewayからはAXCにシンプルなJSONを返すようにしています。
以下の操作を権限に合わせて公開しています。もちろん。VLAN作成など複数箇所に同時に実施するものはaxc vlan create 1111 --resion NW-A
のように、基盤名と共にデプロイすることで同時に対象機器へ設定が反映されます。
負荷が高かった申請作業はAXCに取り込むことができました。操作簡素化という観点ではまだ作業は残っているため、ユーザのリクエストに応じて機能実装を進めていく予定です。
Author