Ansibleを使ってみる

今回は構成管理ツールであるAnsibleを使ってみて、環境構築と実際の使用方法を紹介します。アイキャッチ画像にはPete LinforthによるPixabayからの画像を使用させて戴いております。

今回の目標

今回の目標は、構成管理ツールであるAnsibleを使用して以下の環境を構築する事とします。AnsibleInfrastructure as a Code(IaC)を実践するための各種機能を提供しており、一度設定すればシステムを新しいPCに移行する時などに非常に便利との事なので試してみたいと思います。

それでは、早速試してみます!

Ansibleとは…レッドハットが開発するオープンソースの構成管理ツールである。サーバを立ち上げる際、あらかじめ用意した設定ファイルに従って、ソフトウェアのインストールや設定を自動的に実行する事が出来る。特に大規模なコンピュータ・クラスターを構築する時に、時間の短縮やミスの削減に有用である。構成管理に加え、オーケストレーションやソフトウェアデプロイメントの機能を持つ。

wikipediaより引用

Ansibleの特徴

Ansibleと比較される構成管理ツールにはChefPuppetがあります。これらは構成管理される側にもエージェントのインストールが必要となり環境構築の難易度が高くなります。

その一方で、Ansibleは管理対象にPythonがインストールされていればエージェントレスで使用可能です。

AnsibleサーバがPython codeを生成して管理対象に転送し、ssh経由で実行する仕組みとなっています。

Ansibleは基本的に以下の2つのコードがあれば動作します。

  • Inventory file : 管理対象の役割とホスト情報を記載。
  • Playbook : 管理対象の構成、構築手順を記載(YAML形式)。

Ansibleの実行環境構築

以下の環境でAnsibleを使用します。クライアントPCにAnsibleをインストールし、サーバ側の環境構築を行います。今回はAWSを使用し、クラウド上に本番環境を構築、Dockerのコンテナ上に開発環境、検証環境を構築する想定とします。

  • クライアント : MacOS Catalina version 10.15.6
  • サーバ1 : AWS(EC2) Ubuntu version 4.4.0-1102-aws

サーバ1への構成管理
1. Pythonのインストール

Ansibleの実行環境としてPython2.7もしくはPython3(versions3.5以上)が必要です(構成管理対象)。今回はデフォルトでインストールされているため、新規インストールは不要でした。

test:Username$ python --version
Python 2.7.16
2. Ansibleパッケージをインストール

Homebrewでパッケージを探します。

Homebrewとは…Mac OS Xオペレーティングシステム上でソフトウェアの導入を単純化するパッケージ管理システムのひとつである。同じくmacOSのためのMacPortsやFinkと同様の目的と機能を備え利用が広がりつつある。

wikipediaより引用

以下、実行結果です。

test:Username$ brew search ansible
==> Formulae
ansible                                     ansible@2.8
ansible-cmdb                                terraform-provisioner-ansible
ansible-lint
==> Casks
homebrew/cask/ansible-dk

Ansibleをインストールします。

test:Username$ brew install ansible
….

正常にインストールできた事を確認するためにバージョンを確認します。

test:Username$ ansible --version
ansible 2.9.7
config file = None

以上で、環境構築完了です。簡単ですね。

最小構成で試してみる

hostsファイル

作業対象となるホストを記述します。

ssh_config

playbook

yaml 形式で記述し、各ホストに対してどのようなオプションで実行するかを定義していきます。

ユーザを作成してディレクトリを作成する。

playbookの実行

コマンドを実行してみます。引数にPlaybookのパスとhostsファイルのパスを指定します。

test:ansible$ ansible-playbook test.yml -i hosts
TASK [create user] ****************************************************************************************
changed: [aws]
TASK [create directory] **********************************************************************************
ok: [aws]
PLAY RECAP ***********************************************************************************
aws : ok=3   changed=1   unreachable=0   failed=0   skipped=0   rescued=0   ignored=0

正常に、ユーザを作成し、ディレクトリを作成できました。冪等性を確認するには結果のok=xx changed=xxの部分に着目します。今回の場合、ディレクトリは作成済みだったので、ユーザのみ作成されました(changed=1)。

色々試してみる

SELinuxの無効化

linefileモジュールを使用して、ファイル内の特定の行を書き換えます。

シンボリックの作成

fileモジュールを使用してシンボリックリンクを作成します。

Java(Open JDK)のインストール

aptモジュールを使用して、Open JDKをインストールします。(Ubuntuに対してyumモジュールではインストールできなかったので、aptモジュールを使用しています)

Apache Tomcatのインストール

aptモジュールを使用します。今回は外部のリポジトリからダウンロードして展開します。tomcatユーザを作成し、明示的にディレクトリを作成します。checksumはダウンロードしてきたファイルが正しいか確認するためのもので、間違っている場合はエラーメッセージが出るので、以下の”___”に該当する文字列を記載します。

“The checksum for xxx did not match …; it was ___”

終わりに

今回は、Ansibleのインストールから、Playbookの実行まで行ってみました。Playbookを用意すれば環境構築や、保守作業をほとんど自動化できるように感じました。

今後は実際に現場に取り入れていく方法について考えていきたいと思います。便利な使用方法が見つかったら、改めて紹介させて戴きたいと思います。

それでは、また!

参考資料

今回、Ansibleを環境構築から、実際に使用するにあたり、以下のページを参考にさせて戴きました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です