この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
わたしが携わっている現場ではAnsibleを利用してサーバの構成管理を行っています。
Ansibleって名前は聞いたことがあるけど、結局なにものなのかわたしはよくわかっていませんでした。
今回の記事では、Ansible初心者のわたしがAnsibleについて調べた内容について紹介します。
Ansibleを理解して、わたしと一緒にIaCマスターへの道を歩みましょう!
※ハンズオンはございません。
Ansibleってなに?
■Ansibleとは
そもそもAnsibleとはなんなのでしょうか。Ansibleを開発したRedHatの公式webサイトを見てみましょう。
Ansible® は、プロビジョニング、構成管理、アプリケーションのデプロイメント、オーケストレーション、その他多くの IT プロセスを自動化する、オープンソースの IT 自動化ツールです。他の単純な管理ツールと違い、Ansible のユーザー (システム管理者、開発者、アーキテクトなど) は、ソフトウェアのインストール、日常的に行うタスクの自動化、インフラストラクチャのプロビジョニング、セキュリティとコンプライアンスの向上、システムへのパッチ適用、組織全体での自動化の共有に、Ansible の自動化を使用できます。 Ansible公式ドキュメントより
AnsibleはIaCに役立つ機能が多数備わっていますが、特に重要な機能は"構成管理"ではないでしょうか。シンプルな記述でサーバの構成を管理することができ、使われている記述も覚えやすいので簡単に習得可能です。
●Ansibleを使うメリット
Ansibleを使うメリットは、IaCツール全般に言えることですが、
- 工数の削減
- 品質の向上
それと、Ansibleに関して言うと、
- 記述がシンプル
- 対象サーバへのエージェントインストール不要
- 高可読性のため設定ファイルがそのままドキュメントになる
Ansibleは記述がシンプルなため、ITのスペシャリストではなくてもなんとなくやっていることが理解でき、20時間ほど勉強すれば問題なく使いこなせる学習コストの低さが魅力です。
■Ansibleを深堀り
Ansibleの概要について紹介してきましたが、仕組みについてもう少し深堀していきます。
●Ansibleの仕組み
Ansibleの仕組みは大きく2ステップに分けることができます。
- ステップ1:Ansibleがインストールされたコントロールノードに、インベントリやPlaybookと呼ばれる設定ファイルをもとに情報を取得させる
- ステップ2:ステップ1で取得した情報を管理ノードに対して実行する
Ansibleの仕組みは上記の通り、とてもシンプルです。
●Ansibleで知っておくべき用語
Ansibleを理解するためには仕組みだけはなく、用語も知っておく必要があります。特に重要な用語を5つ紹介しますね。
ひとつずつ紹介していきます。
●重要ワード①冪等性(べきとうせい)
Ansibleでは"冪等性"という考え方が採用されています。
冪等性- 数学において、冪等性(べきとうせい、英: idempotence、「巾等性」とも書くが読み方は同じ)は、大雑把に言って、ある操作を1回行っても複数回行っても結果が同じであることをいう概念である。Weblio辞書より
Ansibleではなぜ"冪等性が採用されているかというと、"手間を省くため"です。
例えば、Ansibleを実行して管理ノードに対してファイルをコピーしたとします。もう一度同じPlaybookで実行した場合、Ansibleは冪等性の"結果が同じである"という概念から、ファイルコピー済みと判断しコピー処理をスキップします。
コピー処理をスキップするため、ファイル名の変更やタイムスタンプの変更も行われないため、ユーザー側は安心してAnsibleを実行することができるわけですね。
●重要ワード②インベントリ
インベントリとは、管理ノードのホスト名やIPアドレスを管理するファイルです。拡張子はINI、YAML、およびTXTです。
以下が例です。
[dbservers]
db01.test.example.com
db02.test.example.com
[appservers]
app01.test.example.com
app02.test.example.com
app03.test.example.com
もしくは、
[devservers]
ansible-dev-target1 ansible_host=52.221.188.59 ansible_connection=ssh ansible_user=ec2-user
ansible-dev-target2 ansible_host=54.179.181.186 ansible_connection=ssh ansible_user=ec2-user
●重要ワード③Playbook
PlaybookはAnsibleがシステムのオーケストレーション、設定、管理、またはデプロイするための言語です。要するに、管理ノードに対して何をするのかを記述したファイルですね。PlaybookはYAML形式で記述され、最小限の構文があります。
Playbookの記述例は以下の通りです。
- name: Setup nginx server on myserver list (host group)
hosts:
- devservers
become: True
tasks:
- name: Install the latest version of nginx
command: amazon-linux-extras install -y nginx1
- name: Start nginx service
service:
name: nginx
state: started
- name: Enable nginx service
service:
name: nginx
enabled: yes
- name: Get nginx Installed version
command: nginx -v
- name: Get status of nginx service
command: systemctl status nginx
●重要ワード④モジュール
モジュールは、Ansibleが管理ノードに送信する作業ユニットです。標準モジュールとカスタムモジュールに分類され、標準モジュールは即利用可能、カスタムモジュールは自身で作成したモジュールを指します。
代表的な標準モジュールを紹介します。
- commandモジュール:管理ノード上で指定したシェルコマンドを実行する
- serviceモジュール:管理ノード上のサービスを制御する
- copyモジュール:コントロールノードに配置されているファイルを管理ノードにコピーする
●重要ワード⑤ロール
ロールはAnsibleで実行される特定のタスクを整理し、再利用可能な単位としたものです。ロールを使用することで、Playbookの記述がシンプルになり、メンテナンス性が向上します。
「重要ワード③ Playbook」で載せた記述例をロールを使って記述しなおすと、以下の通りになります。
tasks部分をweb_server_role/tasks/ディレクトリのmain.ymlファイルに記述し、
- name: Install the latest version of nginx
command: amazon-linux-extras install -y nginx1
- name: Start nginx service
service:
name: nginx
state: started
- name: Enable nginx service
service:
name: nginx
enabled: yes
- name: Get nginx Installed version
command: nginx -v
- name: Get status of nginx service
command: systemctl status nginx
Playbookのtasks部分にロールを呼び出す記述に変更します。
- name: Setup nginx server on myserver list (host group)
hosts:
- devservers
become: True
tasks:
- include_role:
name: web_server_role
用途が一つしかない場合はメリットが感じられないかもですが、WEBサーバ、DBサーバ、APPサーバと管理するサーバが増えてくるとPlaybookの記述量が増え、可読性とメンテナンス性が低くなります。
まとめ:【初心者向け】Ansibleについてざっくりまとめてみた
Ansibleについて学び始めて一週間が経ちましたので、Ansibleの概要と仕組みをざっくりまとめてみました。サーバの切り替え作業や脆弱性対応、新規構築を手作業で行っている方にはぜひ試してみてほしいIaCツールです。
参考リンク:RedHat公式webサイト
↓ほかの協栄情報メンバーも自動化に関する記事を公開しています。ぜひ参考にしてみてください。
■Terraformの概要と使用方法(higa)
https://cloud5.jp/terraform_summary/
■AWS CodePipeline を利用してS3の静的ウェブサイトの更新を自動化する(tatsuoka)
https://cloud5.jp/tatsuoka-handson-beginner-codepipeline/
■AWS上にopenstackを構築(liuwanying)
https://cloud5.jp/openstack-install/
■Ansibleを利用してwindowsOSのインスタンスを操作する方法(umemoto)
https://cloud5.jp/control-windows-fromansible/