9.2K Views
February 28, 23
スライド概要
【これから始めるAnsible】
本連載では、自動化ツールの一つであるAnsible について、これからAnsible を学ぼうという方、使っていきたい方を対象に、導入方法から実用例までを簡単に紹介していきます。今回は、まずAnsible がどんなツールなのかについて紹介し、その導入方法をお伝えします。
◆執筆◆
サイオスOSSよろず相談室 サポートエンジニア
https://sios.jp/lp/yorozu/
サイオステクノロジーのプロフェッショナルサービスチームが運営しています。クラウド、OSS、認証など、皆様に役立つ技術情報を発信しています!
サイオスOSSよろず相談室 これから始める Ansible入門 (1) ©SIOS Technology, Inc. All Rights Reserved.
これから始める Ansible 本連載では、自動化ツールの一つである Ansible について、これから Ansible を学 ぼうという方、使っていきたい方を対象に、導入方法から実用例までを簡単に紹介 していきます。今回は、まず Ansible がどんなツールなのかについて紹介し、その 導入方法をお伝えします。 目次 自動化ツール Ansible とは Ansible のインストール方法 Ansible をとりあえず使ってみる Ansible モジュール ©SIOS Technology, Inc. All Rights Reserved. 2
自動化ツール Ansible とは Ansible とは、大まかに言うとシステム構築やソフトウェアのデプロイ、システム のメンテナンスなど様々なタスクを自動化するツールです。 実行するタスクは YAML 形式で記述するため、誰が書いても統一された書き方にな り、メンテナンス性も良い上に、テキストファイルで管理するため、git などのバー ジョン管理システムとの親和性が高いです。 Ansible を構成する主な要素は、以下の 3つが存在します。 コントロールノード マネージドノード インベントリ Ansible をインストールする対象であり、後述 するマネージドノードを管理する環境。 Ansible によって管理されるシステムやホスト。 マネージドノードをリスト化したもの。 Ansible の特徴として、マネージドノードに Ansible が用意した特別なデーモンや エージェントは必要なく、SSH 等の一般的なアクセス手段があれば Ansible からタ スクを実行することが可能です。 これは、マネージドノードが必ずしも Linux 環境である必要はなく、他にマネージ ドノードとして管理可能なものには Windows 環境やネットワーク機器なども挙げ られます。 ©SIOS Technology, Inc. All Rights Reserved. 3
Ansible がサポートしているマネージドノードへの代表的な接続方法の一例は以下 のとおりです。 接続方法 対象のシステム例 ssh Linux マシン winrm Windows マシン network_cli ネットワーク機器 docker Docker コンテナ podman Podman コンテナ 参考: Index of all Connection Plugins また、Ansible は複数のマネージドノードに対して同時にタスクを実行することが できるため、大量のマネージドノードが存在する場合でも一度に作業を実行するこ とが可能です。 実行するタスクによっては一台ずつ実行したいものについても、キーワード一つ記 述するだけで可能になるなど、柔軟性も非常に高いです。 ここまでの説明では「その程度のメリットであれば、これまでどおりシェルスクリ プトでやれば良いのでは?」と感じる方も少なくないと思います。ですが、Ansible がシェルスクリプトよりも優れている点として、Ansible のタスクファイルが読み やすいことと、実行するタスクが冪等であることが挙げられます。 ©SIOS Technology, Inc. All Rights Reserved. 4
Ansible のタスクファイルは Playbook と呼ばれ、実行するタスクを羅列したものに
なります。その Ansible Playbook の一例を、同様の操作を実施するシェルスクリプ
トと比較したものが以下のとおりです。
Ansible Playbook の例
yaml
- name : motd に "Hello world" を追記する
ansible.builtin.lineinfile :
path : /etc/motd
regexp : '^Hello'
line : 'Hello world'
state : present
同様のシェルスクリプトの例
sh
# motd に "Hello world" を追記する
echo "Hello world" >> /etc/motd
path : /etc/motd
一見、シェルスクリプトの方が短く単純なので、わざわざ Ansible を使う必要が無
いように感じるかもしれません。ここで、Ansible が実行するタスクは冪等である
ということが関連してきます。
©SIOS Technology, Inc. All Rights Reserved.
5
Ansible における冪等性とは、そのタスクを何度実行しても同じ結果になるという ものですが、上記の例であれば Ansible Playbook を何度実行しても /etc/motd に「Hello world」の 1行が記録されたままで変化はありませんが、シェルスクリプ ト側は実行するたびに「Hello world」の行が追記されていきます。追記されていく ことを防ぐために >> ではなく > を使うといった対策も考えられますが、こう すると "Hello world" 行のみで上書きするため、 /etc/motd 内に他の文字列を含 む場合は内容が消去されます。 Ansible の場合は "Hello world" 行が /etc/motd の中に含まれていれば何もせず、 行が含まれていなければ "Hello world" を追記するという動作をします。そのため、 この Playbook を繰り返し実行しても "Hello world" 行が増えていくことも無ければ、 対象のファイルに他の文字列が含まれていても削除されるといった影響は与えませ ん。 同様の動作をシェルスクリプトで実施しようとすると大変な上、内容を変更したい 場合は手作業が必要になるなど、やはり現実的ではないと言えるのではないでしょ うか。この一連の処理を YAML で書くことで単純化できるため、Ansible はタスク の自動実行に便利であることが伝わったのではないかと思います。 ©SIOS Technology, Inc. All Rights Reserved. 6
Ansible のインストール方法 それでは、さっそく Ansible をインストールして Ansible を使えるようにしたいと 思いますが、本連載記事では Rocky Linux 9 と Ubuntu 22.04 LTS の環境を前提に 解説していきます。 Ansible は PyPI 経由でインストールする方法と、各ディストリビューション向けに パッケージングされたものをインストールする方法がありますが、今回は後者の方 法でインストールします。 インストールの際に実行するコマンドは以下のとおりです。 sh # Rocky Linux の場合 $ sudo dnf config-manager --set-enabled crb $ sudo dnf install epel-release $ sudo dnf install ansible # Ubuntu の場合 $ sudo apt update $ sudo apt install software-properties-common $ sudo add-apt-repository --yes --update ppa:ansible/ansible $ sudo apt install ansible Rocky Linux については EPEL リポジトリを有効化して、Ubuntu については Ansible プロジェクトが用意した PPA リポジトリを有効化してインストールします。 ©SIOS Technology, Inc. All Rights Reserved. 7
正しくインストールされたかどうかを確認するために、以下のようなコマンドを実 行してバージョン情報が出力されることを確認してください。 sh $ ansible --version ansible [core 2.12.2] config file = /etc/ansible/ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.9/site-packages/ansible ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections executable location = /usr/bin/ansible python version = 3.9.10 (main, Feb 9 2022, 00:00:00) [GCC 11.2.1 20220127 (Red Hat 11.2.1-9)] jinja version = 2.11.3 libyaml = True これでインストールは完了です。 ©SIOS Technology, Inc. All Rights Reserved. 8
Ansible をとりあえず使ってみる Ansible をインストールしたので、まずは Ansible がどのように動くのか、さっそ くコマンドを実行して試したいと思います。例として、 example.txt を /tmp 配下にコピーするものを Ansible で行います。 はじめに、 ansible-example というディレクトリを作成し、その直下に playbook.yml というファイルを作成したとします。 example.txt の内容はどの ようなものでも構いません。 ansible-example ├ playbook.yml └ example.txt playbook.yml は以下の内容を記述します。 yaml - hosts : localhost tasks : - name : ファイルをコピーする ansible.builtin.copy : src : example.txt dest : /tmp/ ©SIOS Technology, Inc. All Rights Reserved. 9
この状態で、 ansible-example ディレクトリ上で以下のコマンドを実行します。 sh $ ansible-playbook playbook.yml PLAY [localhost] ********************************************************** TASK [Gathering Facts] *************************************************** ok: [localhost] TASK [ファイルをコピーする] ********************************************* changed: [localhost] PLAY RECAP ************************************************************* localhost rescued=0 : ok=2 ignored=0 changed=1 unreachable=0 failed=0 skipped=0 この状態で、さきほど作成した example.txt が /tmp 配下にコピーされている のが確認できましたでしょうか。それでは、もう一度 ansible-playbook コマンド を実行してみてください。 ©SIOS Technology, Inc. All Rights Reserved. 10
sh $ ansible-playbook playbook.yml PLAY [localhost] ********************************************************** TASK [Gathering Facts] *************************************************** ok: [localhost] TASK [ファイルをコピーする] ********************************************* ok: [localhost] PLAY RECAP ************************************************************* localhost rescued=0 : ok=2 ignored=0 changed=0 unreachable=0 failed=0 skipped=0 さきほどと実行結果が少し異なり、「TASK ファイルをコピーする 」の結果が "changed" から "ok" に変わっています。これは、コピー先のファイルがコピー元の 内容と同一であるため、ファイルをコピーせずに何もしなかったことを示していま す。このように、Ansible は Playbook に記述された状態、つまり「あるべき姿」に なるようマネージドノードを操作します。 ©SIOS Technology, Inc. All Rights Reserved. 11
Ansible モジュール さきほど作成した Playbook で ansible.builtin.copy という文字を記述しましたが、 その内容から「これはコピーを実施するコマンドなのかな?」と考えた方は少なく ないと思います。ご推察のとおり、これはコピーを実施するために必要な記述です が、ここに記述するものは実行したい「Ansible モジュール」を指定しています。 この Ansible モジュールとは、コピーを実施したい場合は ansible.builtin.copy を、 それ以外にも実施したい操作に応じて指定する Ansible モジュールが多数存在しま す。すべて紹介することはできませんので、そのなかでもよく使う代表的なものを 抜粋して紹介します。 モジュール名 概要 ansible.builtin.apt apt ベースのパッケージインストールや 削除等の操作をする ansible.builtin.copy ファイルをコピーする ansible.builtin.dnf dnf ベースのパッケージインストールや削除等の 操作をする ansible.builtin.get_url 指定した URL のファイルをダウンロードする ansible.builtin.lineinfile ファイルの行について操作をする ansible.builtin.systemd systemd ユニットを管理する ansible.builtin.template テンプレートを用いてファイルをコピーする 参考: Collection Index 上記の他にも、コマンドを直接実行するモジュールも存在しますが、冪等性が担保 されないため、基本的に使用を控えることをおすすめします。 ©SIOS Technology, Inc. All Rights Reserved. 12
今回は以上です。次回は Playbook の内容を掘り下げ、実用的な Playbook の作り方 について紹介したいと思います。 Ansible入門シリーズ 【これから始めるAnsible】※本記事 本連載では、自動化ツールの一つであるAnsible について、これから 入門1 Ansible を学ぼうという方、使っていきたい方を対象に、導入方法から 実用例までを簡単に紹介していきます。今回は、まずAnsible がどんな ツールなのかについて紹介し、その導入方法をお伝えします。 【Word やExcel の手順書をAnsible Playbook に置き換えよう】 よくありがちなWordやExcelの手順書は、書き手によってフォーマッ 入門2 トが変わったり、変更点がわかりづらいといったことはありません か? WordやExcelの手順書をAnsiblePlaybookに置き換え、上記のよう な問題点を解消する方法についてご紹介します。 →こちらから 【Ansible で複数サーバのセキュリティチェックをしよう】 現在管理しているシステムが脆弱性の影響を受けるバージョンかを確 認するには、システムが多いほど手間がかかり、対策を実施するとな 入門3 ると更に膨大な時間がかかります。今回は、このような場面でAnsible を使い、複数のシステムに対するバージョンチェックや脆弱性への対 策を一度に実行する方法についてご紹介します。 →こちらから 【Terraform と連携してAWS 上の環境を構築しよう】 全4回にわたってAnsible の魅力をお伝えするこの連載は、今回で最後 となります。最後を飾る今回は、インフラ自動構築ツールのひとつで 入門4 あるTerraform をAnsible と組み合わせることによって、インフラの構 築からシステムの設定まで、一連の構築作業を全て自動化する手法を ご紹介します。 →こちらから ©SIOS Technology, Inc. All Rights Reserved. 13
https://sios.jp/products/oss/yorozu/ ©SIOS Technology, Inc. All Rights Reserved.