AnsibleによるOpenStackの自動化

AnsibleによるOpenStackの自動化

著者の連絡先情報

Moinul Islam

Moinul Islam

概要

本稿では、仮想化ソフトウェア「VMware」の仮想マシンをプロビジョニングする代わりに、他の方法で同等のことを実現する手法を紹介します。対象とする読者には、仮想マシンの自動化に取り組むソフトウェア開発者が含まれます。しかし、それだけに限定しているわけではありません。VMwareのサービス・プロバイダ向けライセンスを利用したり、「vRealize」や「vCenter」などのツールをサポートするインフラを利用したりすると、多大なコストがかかります。そこで、筆者らは自前のリソースを活用して、同様のタスクを実行できるコスト効果の高いアプローチを採用しました。コストを抑えられる理由は、オープンソースの技術を利用している点にあります。具体的には、運用管理用の自動化ツール「Ansible Tower®」を使ってクラウド環境構築用のソフトウェア「OpenStack®」とやりとりするDevOps手法(ソフトウェア開発手法の一種)により、Playbook(構成手順を記述したファイル)を使って仮想マシンのプロビジョニングを実現します。筆者らは、この技術を当社のセキュリティ用ソフトウェア「Cyber Range」と統合しました。本稿では、これをケース・スタディとして紹介することにします。

はじめに

本稿では、Ansible TowerのPlaybookを使用することで、OpenStackからいかに容易に仮想マシンを生成(create)/構成(configure)/配備(deploy)できるのかということを明らかにします。仮想マシンとのやりとりを伴うソフトウェア開発においては、次のような事柄が重要な基準になります。すなわち、システムの性能、IT処理の自動化の可否、複雑なシステムの配備の簡素化、生産性の向上です。Ansible Towerでは、これらすべてに対応する機能が提供されています。Ansible Towerを利用する場合、「REST API」を使用して、そうした機能を既存のツールやプロセスに容易に組み込むことが可能です。ユーザにとっては、新たなITサービスをリクエストしたり、特定のクラウドやITリソースを管理したりすることが可能なセキュアなポータルが存在すると非常に便利です。そうしたポータルは、オープンソースのツールであるAnsible Towerを使って実現できます。ネットワークを構築したり、セキュリティを確保したりするためのソフトウェアの構成管理を行う機能や、アプリケーションの配備/アップグレートを自動化する機能を実現することが可能です。

なぜAnsibleなのか?

「Ansible®」は、ITアプリケーションのインフラに求められる機能を完全に記述できるシンプルな自動化ツールです。学習が容易かつ自己文書化(Self-documenting)方式であるため、コンピュータ・サイエンスに関する工学レベルの知識がなくても理解できます。自動化の処理は、それが対象とするタスクよりも複雑なものであるべきではありません。以下、Ansibleの特徴を列挙します。

  • シンプル
    • 高い可読性で自動化用のコードを記述できる
    • 特別なコーディング・スキルは不要
    • 順序どおりにタスクが実行される
    • 即座に生産性が高まる
  • 強力な機能群
    • アプリケーションの配備
    • 構成管理
    • ワークフローのオーケストレーション
    • アプリケーションのライフ・サイクルのオーケストレーション
  • エージェントが不要
    • エージェントを使用しないアーキテクチャ
    • 「OpenSSH」や「WinRM」を使用
    • 攻撃への対処やアップデートにエージェントを必要としない
    • 予測が可能で、信頼性が高く、安全

Ansible Towerとは何か?

Ansible Towerは、Ansibleを管理するためのウェブ・ベースのユーザ・インターフェースです。グラフィカルなダッシュボードを使ってAnsibleベースのインフラを一元的に制御することが可能です。いわば、数々のタスクを自動化するためのハブだと見なすことができます。

Ansible Towerについてのまとめ

以下、Ansible Towerについてまとめます。

  • Ansibleを管理するためのウェブ・ベースのユーザ・インターフェース
  • グラフィカルなダッシュボードを使ってAnsibleベースのインフラを一元的に制御可能
  • AnsibleのREST APIに対応
  • Ansibleの概要
    • オープンソースの自動化ツール
    • 学習/理解が容易
    • カスタムのスクリプトやコードは不要
    • 自動化用のエンジンを提供
    • ネットワーク、インフラ、OSを管理
    • ホスト(450以上)の管理/構成用のモジュールを提供
    • Python®ベースのAPIを提供
    • OpenSSHを使用
    • Playbookによって自動化とオーケストレーションを実現

OpenStackとは何か?

OpenStackは、データ・センターを介してコンピュータ、ストレージ、ネットワーク・リソースの大規模なプールを制御するクラウド・ベースの運用システムです。管理権限を与えられたアドミニストレータがダッシュボードを介してあらゆることを管理しますが、ユーザに対しては、ウェブ・ベースのインターフェースを介してリソースをプロビジョニングする権限が与えられます。OpenStackは、クラウド・アプリケーションの構築用にIaaS(Infrastructure as a Service)プラットフォームを提供するオープンソースのプロジェクトによって開発されています。OpenStackは、クラウドのプロビジョニングとオーケストレーションを実行するために複数のハイパーバイザをサポートします。また、マルチティアのワークロードやオープンソースの開発ツールを実行できます。エンド・ユーザは、リソースを容易にプロビジョニングできることに加え、「VMware ESXi」、「Xen」、「KVM」を含むあらゆるハイパーバイザを利用できます。

なぜOpenStackなのか?

OpenStackは、Ansible Tower、VMwareのハイパーバイザ、x64向けの仮想化システム「Hyper-V」と容易に統合することができます。それにより、既存のインフラを利用することが可能になります。OpenStackとKVMのハイパーバイザは無償で使用できますが、熟練のアドミニストレータの手によって構成する必要があります。OpenStackは、クラウド・プラットフォームを開発、ビルド、配備するためのオープンソースのプラットフォームです。コマンド・ライン・インターフェースを基本としますが、ウェブ・ベースのコントロール・パネルで制御できることに加え、アドミニストレーション・ソフト、API、RESTful Webサービスによって強化されています。このオープンソースのクラウド・ソフトウェアは、コンピューティング(Nova)、ブロック・ボリューム・ストレージ(Cinder)、仮想マシン・イメージ・サービス(Glance)、ネットワーキング構築(Neutron)を管理するために使用されます。OpenStackは、配備のプロセスだけでなく、開発、ストレージ、ネットワーキング、モニタリング、マネージメント、アプリケーションを簡素化するための基盤としても機能します。

OpenStackについてのまとめ

以下、OpenStackについてまとめます。

  • オープンソースのソフトウェアなので、開発者の大規模なコミュニティによってサポートされている
  • クライアントに価値と効率、アジリティを提供する
  • X 拡張が可能で柔軟性の高いモジュール式のユーティリティ・セットで構成されている
  • 大手企業による試行とテストを実施済み
  • 相互運用性を備えること、オープンソースのAPIを使えることから、アドミニストレータはオーバーヘッド・レイヤを追加することなく、ハイブリッド型のIT環境を管理できる

AnsibleのPlaybook

Playbookは、一連のホストに対して実行するタスクのリストを記述したYAMLファイルです。対象となるホストは、Ansibleのinventoryの中で定義します。Playbookは、1つ以上のPlayで構成されます。Playは、タスクをグループ化する役割を果たします。具体的には、仮想マシンの名前、VMDKファイル、ネットワーキング、IPアドレス、シナリオの情報を定義します。Playbookは、構成管理とマルチマシン用配備システムに対応する非常にシンプルな基盤です。Playbookには構成情報を宣言できますが、手作業で順序づけされたプロセスのステップをオーケストレーションすることも可能です。

Playbookについてのまとめ

以下、Playbookについてまとめます。

  • ホストで実行するタスクを定義
  • Playbookで定義した順にタスクを実行
  • YAML型式で記述
図1. Playbookの記述例

図1. Playbookの記述例

AnsibleとOpenStackのやりとり

本稿の例では、AnsibleのPlaybookに、一連のタスクとOpenStackの構成についての定義を記述します。タスクの例としては、仮想マシンのインスタンスのプロビジョニング、仮想マシンのIPの定義、仮想マシンをネットワークに接続するための切り替え処理などが含まれます。

ケース・スタディ: Cyber Rangeとの統合

Cyber Rangeは、サイバー・セキュリティのトレーニング、モデリング、シミュレーション、高度な解析といった機能を提供します。拡張可能な仮想化プラットフォームとして機能するものであり、米国国防総省、シンガポールのCyber Security Agency(CSA)、九州大学などのお客様に採用されています。

以下、図2の環境における作業/処理の流れを示します。

  1. ユーザは、スタート・ボタンをクリックし、演習(サイバー・セキュリティに関する実践的なトレーニング)を開始します。
  2. Cyber Rangeは、Ansible Towerに対してトレーニングのシナリオ名とユーザ名の呼び出しを行います。この処理は、REST APIを介したPOSTリクエストによって実行されます。
  3. Ansible Towerは、Playbookとして記述された演習用のタスクを実行し、OpenStackに構成情報を受け渡します。この情報には、仮想マシンのイメージとネットワーキングの情報が含まれています。
  4. OpenStackは、仮想マシンのイメージをプロビジョニングし、ネットワークを構成します。
  5. OpenStackは、Ansible Towerにステータスを返し、Ansible Towerはウェブ・アプリケーションにステータスを返します。
  6. ステータスが良好である場合、Cyber Rangeは、コンソールを開くためのハイパーリンクを有効にするWindows/Linuxのアイコンを表示します。
図2. 本稿で例にとるアプリケーション環境。Cyber Rangeをベースとするウェブ・アプリケーションは、REST APIを介してAnsible、OpenStackとのやりとりを行います。

図2. 本稿で例にとるアプリケーション環境。Cyber Rangeをベースとするウェブ・アプリケーションは、REST APIを介してAnsible、OpenStackとのやりとりを行います。

まとめ

Ansible TowerとOpenStackをCyber Rangeと組み合わせることにより、オンデマンドのトレーニングと現実のシナリオを世界中のお客様に提供するアプリケーションを構築することができます。PlaybookでAnsibleのREST APIとの統合を図ることで、順序づけされた自動化プロセスによるプロビジョニングに必要な多くのコードを非常にうまく利用することができました。本稿で紹介した内容のキー・ポイントを以下にまとめます。

  • Ansibleを使用すれば、クラウド・サービスのインスタンスのプロビジョニングのほか、システムのプロビジョニング、ソフトウェア・パッケージのインストール、ネットワークの構成、セキュリティ機能の実行を含む様々なITタスクを自動化することができます。
  • 仮想マシンのオーケストレーションと構成のほか、カスタムのネットワーク内に複数の仮想マシンが存在する複雑なシナリオにおいて、配備のタスクを簡素化するためにPlaybookを使用する場合には、配備中にカスタムのスクリプトを実行しなければならないことがあります。
  • Playbookを使ってコマンドを1つずつ実行するプロセスは、タスクと呼ばれます。
  • Ansibleを使ってOpenStackの自動化を実現するためには、OpenStack、Ansible、Ansible Towerに加え、ソース管理(例えば、Gitリポジトリ)が必要になります。

アナログ・デバイセズの他のクラウド・プロジェクトにおいて、自動化を図ったりクラウドのインフラを配備したりする際には、AnsibleとOpenStackの利用を検討することを推奨します。