AI開発だけじゃないPython
Pythonはオープンソースで提供されている人気のプログラミング言語です。AIブームとともにPythonが注目されるようになり、今ではプログラミング開発の定番として、Python関連本がAmazonの書籍売上ランキングの上位を占めています。毎月新しいPython本が発売され、その多くが「機械学習」や「データサイエンス」といったAI開発に関連するキーワードをタイトルに付けており、読者の関心もそこにあることが見て取れます。かくいう私も、上梓したPython本のタイトルに「機械学習」を付けてアピールしているわけです。
実はこの本の執筆にあたって、当初はAI開発だけじゃないPythonの魅力を伝えようという目的がありました。タイトルこそ「機械学習」を付けていますが、Webアプリ開発をトピックに加えるなど、当初の目的を達成しようと、様々な試みをしています。
実際Pythonは、AI開発以外にも多くの用途に使われています。たとえば私がサイバー大学で受け持っている「Pythonプログラミング演習」では、応用編として次のトピックを扱っています。
- Webアプリ開発
- スマホアプリ開発
- インフラ自動化
- データサイエンス(解析/分析)
- 機械学習/ディープラーニング
- GPUコンピューティング
- IoTプログラミング
Pythonには優れたライブラリーやフレームワークが揃っており、そうした周辺環境のエコシステムにより、さらにPythonの活用を広げています。
「インフラ自動化」にも使えるPython
コマンドラインで使用することが多いPythonですが、スマホアプリやデスクトップアプリのように、GUIを備えたアプリの作成にも活躍します。またロボット開発やIoT機器といった"モノづくり"の現場でもPythonが活躍します。上梓した書籍に含められなかったトピックから、「インフラ自動化」について解説します。
コードによるインフラ構築
ITインフラエンジニアが手動で行っていた、1台1台の機器に対するインストールから環境設定といった作業を、プログラム(コード)に代替させることを自動化といいます。、サーバーやネットワークといったITインフラを自動化するのがインフラ自動化になります。オペレーターが手動で行っていた作業をコードやプログラムに代替することで、複数の機器を同時に、それも瞬時に設定できます(図1)。
図1 コードによるインフラ構築
インフラエンジニアが行なっていた作業をコードに置き換えることで、インフラが専門ではないソフトウェア開発者でもインフラを構築できるようになります。またソースコード管理や、テスト手法といったソフトウェア開発のノウハウを、インフラ自動化に活かすことができます。一旦コードが完成してしまえば、サーバー1台も100台も同じ手間で構築できるようになり、工数が大幅に削減できるといったメリットがあります。自動化によるメリットは次の通りです。
- コード化によりテスト工数が削減できる
- 専門のインフラエンジニアが不要になる
- ヒューマンエラーを低減できる
- 誰が作業しても同じ品質を保てる
- 変更履歴を自動的に保存できる
- コード化により再利用が容易になる
インフラ自動化は、すべてのインフラ構築作業を置き換えるものではありません。初期構築やアップデート作業といった定型的な作業やマニュアル化しやすい作業を自動化するのに適していますが、いつ起こるかわからない作業や、障害対応のように事前に予見しておくことができない作業、その都度人の判断によって対策を考えなくてはいけない作業といった非定形的な作業を自動化するのは困難です。
また、コード化にはコストがかかるため、ある程度の規模がないと自動化によるコストメリットが生まれません。1度しか行わない構築作業や、小規模な作業では、コードを書く手間の方が大きくなるため、従来どおり手動で構築した方が、コストが安く、作業時間も早くなります。
自動化の領域
インフラ構築時における自動化可能な領域は次の3領域に分類されます(図2)。
- ブートストラッピング(Bootstrapping)
- OSやプラットフォームを利用可能な状態にします。
- 例 仮想マシンや仮想コンテナの配置
- 代表的なツール vagrant、docker
- コンフィグレーション(Configuration)
- データベースやWEBサーバーといったミドルウェアをサーバーへインストールし各種設定を行います。
- 例 サーバー構成管理の自動化
- 代表的なツール Chef、Ansible
- オーケストレーション(Orchestration)
- リソースの集合体に連携させます。
- 例 クラスタ構築、監視ツール連携、Infrastructure as Code
- 代表的なツール Chef、Ansible、Fabric
図2 自動化の領域
ITインフラ自動化ツールの「Ansible」
「Ansible」は、Pythonで作られたオーケストレーションツールです。ITインフラに対する設定や構成変更といった作業をコードによって自動的に実行します。米レッドハット社が開発しており、オープンソースソフトウェアとして提供されています。Pythonで作られていますが、モジュールを拡張するなどしない限り、Pythonコードを記述する必要はありません(図3)。
図3 Pythonで作られたAnsible
自動化コードは「Playbook」 といわれる定義ファイルにYAML(ヤムルと発音)形式で記述します(図4)。
図4 Playbookファイルのサンプル
YAML形式は次のように記述します。
- 「-(空白)○○」でデータ構造を表す
- データ構造の中は「キー: 値」形式(「:」のあとに半角スペースを 1 つ)
- 入れ子にインデントを用いる
- インデントは空白(スペース文字)2個
Playbookを記述したら、Ansibleサーバーにロゲインして、コマンドラインで実行します。なお管理権限を持ったユーザーがAnsibleの構成管理コマンドを実行する必要があります。
Pythonは道具
Pythonの活用事例の1つとしてITインフラ自動化ツールのAnsibleについて解説しました。Pythonは、様々な分野で"道具"として活用されていますが、道具の使い方に長けていても、道具を活かすには、それぞれの分野での知識も不可欠です。「これからはじめる Python入門講座 —— 文法から機械学習までの基本を理解」では、一冊で完結できるよう、Pythonの基本から、各分野に必要な知識についても触れています。ぜひ、手にとっていただけますと幸いです。