Ansibleとは

Ansibleとは

2020, Jun 21    

Ansibleとは?

AnsibleはIaaC(Infrastructure as a Code)を目指す自動化管理ツールで、オープンソースでできている。AnsibleのモジュールおよびライブラリはPythonを基盤にしていて、YAMLフォーマットをもとにプレイブックを実行することで自動化を実現したり、Adhocモードでモジュールを実行して状態を照会することができる。また、既存のChefやPuppetのようにTarget HostにAgentを必ずインストールしなければならないことに対して、AnsibleはSSHをベースにTarget HostにAgentless方式で自動化を構成管理する。このような動作方式は従来のPull方式ではなく、AgentlessベースのPush方式で動作するため、インストールと構成管理に便利なメリットがある。このようなアドバンテージに基づき、多様なサーバ、ネットワーク、ストレージ、仮想化ソリューションをコードベースで管理する利便性を持っている。

IaaC(Infrastructure as a Code):
従来のインフラの柔軟性に欠けるスクリプトまたは手動のCLIベースのシステムプロビジョニング方式から脱却し、システムをプログラミングコードベースで自動インストールや構築、管理、プロビジョニングを実現するITインフラ構成プロセスのこと。上記の理由でIaaCをプログラミングが可能なインフラと定義することもある。IaaCを基盤とするツールは多様であり、動作方式も色んな形をしている。Chef、Puppet、SaltStack、Ansible、Terraform などがIaaCツールとして知られており、これらのツールはITインフラをプロビジョニングするのに使われている。

主な特徴

  • Agentless
    一般的にほとんどのIaaCツールが自動化対象にAgentを基盤に構成するPull方式に対して、Ansibleは自動化対象にAgentlessベースのPush動作方式で動作する。 ターゲットにAgentを設置しないため、データセンターやITインフラ担当者は相対的に抵抗感が少なく、SSHベースで大部分動作するため、技術的アクセスも容易である。このような特徴のため、既存のIaaCツールは主に限られたサーバ領域で提供されていたが、Ansibleは非常に幅広い領域で使用されている。

  • アクセスしやすさ
    AnsibleはPythonベースでできているものの、Pythonに関する専門知識がなくても使用できるほど技術への参入障壁が低い。実際にPlaybookを実行するためにYAMLを使うが、可読性において大きな困難がないためDevOpsの進入も容易な点が魅力である。

  • 多様なモジュールに対応
    バージョンが持続的にパッチされ、幅広いユーザー層を確保することで多くのモジュールをサポートしている。先に紹介したIaaCツールの中で、Ansibleより長い歴史を持っているツールよりも多くのコミュニティと多くのサポートモジュールとプラグインを持っているのもとても大きな魅力である。様々なクラウドインフラ、仮想化、サーバ運営体制、プラットフォームおよびネットワークからストレージまで、非常に幅広いモジュールをバージョンアップ毎に拡張している。

    Ansibleのモジュール: https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

  • 冪等性
    冪等性(idempotence)は演算を何度行っても結果が変わらない性質をいう。Ansibleでは、YAMLスクリプトファイルで作成したPlaybookを複数回繰り返しても同一な結果を出力させ、結果が変わらないように構成されているため、冪等性を一貫して行うことができる。これは、実際にIT担当者が自動化ツールを実行する際に、誤動作や設定ミスなどによって問題が発生することを解消するのに役立つ。Ansibleを実行すると、Taskを実行する前にモジュールの状態を先にチェックして、Taskを実行する際に変更された部分に対する情報を提供して一貫性のある結果を提供することができる。

Install

インストールはほとんどの環境で提供され、pythonさえ事前にインストールされていれば簡単に起動できる。

  • CentOS
    sudo yum install ansible
    
  • Ubuntu
    sudo apt-get install ansible
    
  • Mac OS
    brew install ansible
    
  • インストール後のバージョン確認
    $ ansible --version
    ansible 2.7.10
    config file = None
    configured module search path = [u'/Users/woohyungchoi/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
    ansible python module location = /Library/Python/2.7/site-packages/ansible
    executable location = /usr/local/bin/ansible
    python version = 2.7.10 (default, Feb 22 2019, 21:17:52) [GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14)]
    

References

  • https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html