4.1K Views
February 28, 23
スライド概要
【Word やExcel の手順書をAnsible Playbook に置き換えよう】
よくありがちなWordやExcelの手順書は、書き手によってフォーマットが変わったり、変更点がわかりづらいといったことはありませんか?
WordやExcelの手順書をAnsiblePlaybookに置き換え、上記のような問題点を解消する方法についてご紹介します。
◆執筆◆
サイオスOSSよろず相談室 サポートエンジニア
https://sios.jp/lp/yorozu/
サイオステクノロジーのプロフェッショナルサービスチームが運営しています。クラウド、OSS、認証など、皆様に役立つ技術情報を発信しています!
サイオスOSSよろず相談室 これから始める Ansible入門 (2) ©SIOS Technology, Inc. All Rights Reserved.
Word や Excel の手順書を Ansible Playbook に置き換えよう この記事をご覧の方が、構築手順書と聞いて想像するものは、Word や Excel を用 いて記述されたものを想像するかと思います。 ですが、Word や Excel で記述された手順書は、書き手によってフォーマットが変 わったり、修正が入った際の変更点がわかりづらかったり、実際に作業する際に作 業ミスが発生したりしていないでしょうか。 今回は、Ansible を使ってこのような手順書を Ansible Playbook に置き換え、前述 のような問題点を解消する方法についてご紹介します。 目次 手順書を Ansible Playbook に 置き換えるメリット Ansible Playbook 手順書を作る ©SIOS Technology, Inc. All Rights Reserved. 2
手順書を Ansible Playbook に 置き換えるメリット 1. フォーマットが統一される Word や Excel で記述された手順書は、その書き手やプロジェクトごとのルールに よって見栄えであったり、書き方が様々です。また、執筆者にとっても表の装飾や フォントをひとつひとつ合わせるなどで、実行すべき手順そのものとは関係のない 部分で時間がかかっていたりしないでしょうか。 一方、Ansible Playbook はテキスト形式のひとつである YAML で記述するため、書 き手による見栄えや書き方に差ができることはありません。そのため、初めて携わ るようなプロジェクトにおいても、統一されたフォーマットで書かれているため、 内容がすんなり理解できるようになります。 2. 変更点がわかりやすくなる 前述のとおり、Ansible Playbook はテキスト形式であるため、Git などのソース コード管理ツールを使うことによってバージョン管理が行えるようになります。特 に、Git を使うことでプルリクエストのような仕組みが使えるため、Ansible Playbook の書き手となる人は同時に編集作業が行えます。Word や Excel を使う場 合は、同時編集機能が存在するとはいえ、同時に編集作業を行うには適さないツー ルです。 ©SIOS Technology, Inc. All Rights Reserved. 3
3. 手作業によるミスや作業時間が減る Word や Excel で記述された手順書は、実行するコマンドなどの作業が手順に沿っ て記述されていますが、基本的にひとつひとつコマンドなどを実行するため、作業 ボリュームにもよりますが、作業時間は相当なものになりがちです。また、人の手 による作業になるため、コマンド引数や使用するファイルやパス、実行するコマン ドそのものを間違える可能性は低くありません。そのための復旧手順などを併記し ていることがほとんどだとは思いますが、その手戻りのためにさらに時間を要しま す。 一方、Ansible では Ansible Playbook を実行するコマンドひとつで、Playbook に 記述されたすべての作業を自動的に実行するため、実行時間は手作業とは比べ物に ならないくらい早く実行できます。また、記述された内容を自動で実行するため、 テスト環境に対して実行して不具合を洗い出し、修正が完了したものをそのまま本 番環境で実行できるといった点で、作業ミスが発生しづらくなります。 さらに、本連載では触れませんが、Ansible Tower という Red Hat 社の製品(OSS 版の名称は AWX)を使用することで、Playbook のスケジューリング実行が可能に なったり、複数のシステムに対して実行した結果を視覚的に管理できるなど、ある 程度の規模を Ansible で管理する際にはとても有用なツールがあります。 ©SIOS Technology, Inc. All Rights Reserved. 4
Ansible Playbook 手順書を作る それでは、さっそく Ansible Playbook で手順書を作成しましょう。今回は、Web サーバとして Nginx を構築する手順を作成します。 まず、Ansible がどのホストを管理対象とするかを設定するため、インベントリ ファイルを作成します。任意のディレクトリ上に「hosts」という名前で作成し、以 下の内容を入力します。 「hosts」ファイルに入力する内容 [webserver] rocky9 ubuntu2204 上記の例では、Rocky Linux 9 の環境であるホスト「rocky9」と、Ubuntu 22.04 LTS の環境であるホスト「ubuntu2204」を、「webserver」というグループ名でま とめるよう定義しています。実際にお手元で試す際は、Ansible を実行する環境か らログイン可能なホスト名を指定してください。 ©SIOS Technology, Inc. All Rights Reserved. 5
それではさっそく Playbook を書き始めましょう。Nginx をインストールして、自 動起動を有効にした上で起動するタスクを定義します。「playbook.yml」という名 前で先ほどの「hosts」ファイルと同じディレクトリ上に作成し、以下の内容を入力 します。 「playbook.yml」ファイルに入力する内容 yaml - hosts : webserver become : yes tasks : - name : Nginx をインストールする (Rocky Linux) ansible.builtin.dnf : name : nginx state : present when : ansible_distribution == "Rocky” - name : Nginx をインストールする (Ubuntu) ansible.builtin.apt : name : nginx update_cache : yes state : present when : ansible_distribution == "Ubuntu” - name : Nginx を起動する ansible.builtin.systemd : name : nginx.service enabled : yes state : started ©SIOS Technology, Inc. All Rights Reserved. 6
最初の hosts というパラメータにはタスクを実行する対象のホストグループを定 義します。ここでは、先ほどのインベントリファイルで定義したホストグループ "webserver" を指定しています。次に become というパラメータが存在しますが、 これはすべてのタスクをログインするユーザとは異なるユーザで実行する、つまり "sudo" のような権限昇格をした上でタスクを実行することを意味しています。ここ ではユーザを指定していないので、デフォルトで "root" ユーザで実行します。 次の tasks パラメータから、リスト形式で実行するタスクを定義していきます。 最初は Rocky Linux 環境向けに ansible.builtin.dnf モジュールで、次に Ubuntu 環境向けに ansible.builtin.apt モジュールで nginx パッケージのインストールを 実行します。最後に ansible.builtin.systemd モジュールで自動起動を有効に設定 しつつ nginx サービスを起動します。 ©SIOS Technology, Inc. All Rights Reserved. 7
ひとまず Playbook が完成したので、この Playbook を実行して正しく Nginx をイ ンストールして起動されるか確認します。以下のように ansible-playbook コマン ドを実行しましょう。 -i パラメータには、先ほど作成したインベントリファイル を指定します。 sh $ ansible-playbook -i hosts playbook.yml PLAY [webserver] ********************************************************* TASK [Gathering Facts] *************************************************** ok: [rocky9] ok: [ubuntu2204] TASK [Nginx をインストールする (Rocky Linux)] **************************** skipping: [ubuntu2204] changed: [rocky9] TASK [Nginx をインストールする (Ubuntu)] ******************************** skipping: [rocky9] changed: [ubuntu2204] TASK [Nginx を起動する] ************************************************** ok: [ubuntu2204] changed: [rocky9] PLAY RECAP ************************************************************** rocky9 rescued=0 : ok=3 ignored=0 changed=2 ubuntu2204 : ok=3 rescued=0 ignored=0 unreachable=0 changed=1 failed=0 unreachable=0 skipped=1 failed=0 skipped=1 ©SIOS Technology, Inc. All Rights Reserved. 8
Playbook 実行後、ブラウザでそれぞれの環境にアクセスすると、デフォルトページ が表示されます。上記の ansible-playbook コマンド実行結果のうち、最後の 「Nginx を起動する」タスクにおいて、Rocky Linux 側では環境の操作が加えられ たことを示す "changed" ステータスになっていますが、Ubuntu Linux 側では環境 の操作を加えなかったことを示す "ok" ステータスになっています。 これは、Rocky Linux で nginx パッケージをインストールしても自動で nginx サー ビスが起動しない一方で、Ubuntu で nginx パッケージをインストールすると自動 で nginx サービスが起動するため、Ubuntu 側ではタスクを実行する必要がありま せん。Ansible は、このような環境ごとの差異があったとしても、Playbook で定義 された「あるべき姿」を満たすよう動作します。従って、Word や Excel で記述さ れた手順書にありがちな「〜する前に〜であることを確認する」といった、作業前 の状態確認は必要ありません。 ©SIOS Technology, Inc. All Rights Reserved. 9
次に、設定を変更して Nginx を再起動し、変更を適用させる Playbook を書いてみ ましょう。上記の Playbook の最後尾に、以下の内容を追記します。 yaml - hosts : webserver become : yes tasks : (中略。以下の内容を追記する。) - name : Nginx の設定を変更する ansible.builtin.copy : content : | server_tokens off ; dest : /etc/nginx/conf.d/custom.conf notify : Nginx を再起動する handlers : - name : Nginx を再起動する ansible.builtin.systemd : name : nginx.service state : restarted 追記が完了したら、再度 ansible-playbook コマンドを実行しましょう。すると、 設定を変更し、Nginx を再起動したことを示すログが出力されます。 ©SIOS Technology, Inc. All Rights Reserved. 10
PLAY [webserver] ********************************************************* sh TASK [Gathering Facts] *************************************************** ok: [rocky9] ok: [ubuntu2204] TASK [Nginx をインストールする (Rocky Linux)] **************************** skipping: [ubuntu2204] ok: [rocky9] TASK [Nginx をインストールする (Ubuntu)] ******************************** skipping: [rocky9] ok: [ubuntu2204] TASK [Nginx を起動する] ************************************************** ok: [ubuntu2204] ok: [rocky9] TASK [Nginx の設定を変更する] ******************************************** changed: [ubuntu2204] changed: [rocky9] RUNNING HANDLER [Nginx を再起動する] ********************************* changed: [ubuntu2204] changed: [rocky9] PLAY RECAP ************************************************************** rocky9 rescued=0 : ok=5 ignored=0 changed=2 ubuntu2204 : ok=5 rescued=0 ignored=0 unreachable=0 changed=2 failed=0 unreachable=0 skipped=1 failed=0 skipped=1 ©SIOS Technology, Inc. All Rights Reserved. 11
再度 ansible-playbook コマンドを実行すると、「Nginx を再起動する」という handlers として記述した内容は実行されません。これは、「Nginx の設定を変更 する」タスクにおいて変更が生じた場合のみ「Nginx を再起動する」タスクを実行 するよう、 notify キーワードで設定したためです。これにより、何度も Playbook を実行しても、Nginx を無闇に再起動しないようにできます。 次回は、この Ansible を使って、複数のサーバに対するセキュリティチェックを簡 単に実現する方法についてご紹介します。 ©SIOS Technology, Inc. All Rights Reserved. 12
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.