Ansibleの基本① - Ansibleの概要
はじめに
仕事でAnsibleを使っていくことになり、基礎中の基礎的なことを個人的メモ。
最終的にはAnsibeでコンテナ上にサーバーを立ち上げ、アプリケーションをインストールするところまでやれたら良いなと考えてます。
この記事は概要を書いているだけなので、色々な記事を切り抜き、まとめたものになってます。
Ansibleとは
構成管理ツールの一つで、いわゆるInfrastructure as Code(IaC)
を実現していくものになります。RedHat社が中心となって開発しているOSSです。
[1][2][3]
AnsibleのコンセプトAnsibleは、Simple
、Powerful
、Agentless
という3つのコンセプトを掲げています。
特徴 | 概要 |
---|---|
Simple | 構成管理していく内容は、YAMLファイル(Playbook )で書いていきます。YAML形式を採用することで可読性の高いシンプルな記述になります。 |
Powerful |
Modules と呼ばれる様々な機器を操作するためのライブラリを使用することができます。OSやDBの種類ごとに合わせて、適切なモジュールを使うことで、マルチレイヤでの構成管理ができます。 |
Agentless | 構築対象となるサーバ、機器に対してAgentをインストールする必要がないため、余計な管理負荷、セキュリティリスクを負わなくて済みます。 |
Ansibleの構成
Ansibleは主にAnsible本体とPlaybook
、Modules
、Inventory
で構成されています。
簡単に説明するとPlaybook
に書かれた操作手順(Module
という操作単位で書かれる)を基に、Inventory
に書かれる構成管理対象へ、Ansible Engineが実行するような構成になります。
[4]
PlaybookYAML形式で書かれる構成管理対象への操作手順を記述したファイルで、いわゆる手順書となるものです。Playbookへコードを書いていくことになります。
- Playbookの例
---
- hosts: webservers
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
- hosts: databases
remote_user: root
tasks:
- name: ensure postgresql is at the latest version
yum:
name: postgresql
state: latest
- name: ensure that postgresql is started
service:
name: postgresql
state: started
Modules
Playbookで書かれる操作をライブラリとしてまとめたもの。
上記Playbookの例だと、tasks
配下のyum
、template
、service
がModuleになります。
Inventory
構成管理対象のホストやグループを管理するファイル。hostsファイルみたいなもの。
- Inventoryの例
[webservers]
apache1.example.com
apache2.example.com
[databases]
postgres[1:2].db.com
[5]
Terraformとの違いIaCで調べたら大体ヒットするであろうTerraformとの違いについて書いていきます。
IaCは、大きく手続き型
と宣言型
の2種類の記法に分けることができます。これはアプリケーションコードでも手続き型(COBOLなど)、オブジェクト指向型(Javaなど)、関数型(Cなど)と記法ごとに分けられているのと同じです。
手続き型
インフラを構築していく手順を記述していく記法になります。
- メリット
- 手順をそのままコードに書き下していくような形になるため、最初の障壁が低い
- コードも従来アプリケーション開発で用いられてきた汎用のプログラミング言語であることも多く、自由度が高い
- デメリット
- 手順の積み重ねでコードを書くので、全体としての意図の見えにくくなる
- 大きな変更に弱い
- 代表例
- Ansible
宣言型
インフラを構成するリソースの状態を記述していく記法です。現在の状態から宣言された状態への差分を自動的に埋めるように処理が行われます。
- メリット
- 最終的にリソースがあるべき状態を記述するため、全体としての意図が見えやすくなる
- デメリット
- 抽象的なコードになるため、最初の障壁が高い
- 汎用プログラミング言語ではないため、自由度が低い
- 代表例
- Terraform
AnsibleとTerraformの使い分け
Ansibleは手順を自動化し、Terraformは状態管理を自動化します。よって、Terraformをインフラの構築全般に使い、Ansibleはサーバ単体の構築に向いています。
IaC | 使い分け |
---|---|
Ansible | サーバ単体の構築 |
Terraform | インフラの構築全般 |
サーバ単体の構築は大抵の場合、リソース間の相互作用がそのサーバ単体の中で閉じられているため、全体像がそれほど複雑になりません。また、サーバの中に配置したいものは一般的なミドルウェアであったり、あるいは自前で開発したバッチスクリプトであったり、多岐に渡るため、シェルスクリプトと一対一のように記述できるAnsibleが扱いやすく、採用の動機になります。
対して、VPCやセキュリティグループ、RDBなどはリソースごとに相互作用があり、どこかで定義した値を別の場所で使う、ということが多くあります。このようなシーンではTerraformはうまく相互関係を解決してくれます。
[6]
AnsibleとTerraform比較一覧項目 | Terraform | Ansible |
---|---|---|
開発元 | HashiCorp | RedHat |
クラウドプロバイダ対応数 | 300以上 | 41 |
インフラ層の構成管理 | 優れている | 対応可能 |
OS・ミドルウェア層の構成管理 | 対応可能 | 優れている |
エージェントの要否 | 不要 | 不要 |
GUI | 有 | 有 |
オープンソース版 | 有 | 有 |
メーカーサポート付きの商用版 | 有 | 有 |
SaaS提供 | 有 | 有 |
参考用
Ansibleクイックスタートビデオ
RedHatが公開しているAnsibleクイックスタートガイドをまとめた動画です。
Ansibleの概要をさっさと知りたい方向けの動画です。
Ansible学習環境
ブラウザ上でAnsibleの実行ができる。すごい。
Ansibleで始めるインフラ構築自動化
正直これだけでいいじゃんっていうぐらい、Ansibleのことがまとまっているスライド。
AWX
AnsibleのGUI(OSS版)。
Ansible-semaphore
AnsibleのGUI(OSS版)。モダンGUIでMITライセンスなのがAWXとの違いか?
Ansible Tower
AnsibleのGUI(エンタープライズ版)。
Ansible-builder/Runner
Ansible Playbookの実行環境をコンテナ化して提供できる。
Discussion