メモ > サーバ > 各論: Ansible > Ansibleとは
Ansibleとは
構成管理ツール
あらかじめ用意しておいた設定ファイルに従って、
ソフトウェアのインストールや設定ファイルの修正、サービスの起動/停止、ネットワーク設定
といったサーバーの各種設定を自動的に実行する
以下の特徴がある
・エージェントレス
・Pythonで書かれている
・設定ファイルが少なく記述がシンプル
「エージェントレス」というのは、設定したいサーバに専用ツールをインストールしなくても使える、ということ
この場合、Ansibleを実行するサーバを別途用意しておき、SSH経由で対象サーバを自動操作する
(自身にAnsibleをインストールして、自身を操作する…という使い方もできる)
サーバ構築を自動化するツールではあるが、構築するためのコードを作成するのはそれなりに手間がかかる
また、「CentOS7では動いたのにAmazonLinuxでは動かない」などは珍しくない
どちらかといえば「サーバの構築内容をコード化することでGit管理を可能とし、変更履歴を管理できるようになる」という面が大きい
サーバ手動構築とAnsibleでの自動構築を、ある程度把握している人がコードをメンテナンスし続ける必要はある
「これがあれば何も知らなくてもサーバを立ち上げられるツール」では無いが、
「比較的単純な似たようなサーバを何度も構築する」場合には作業効率が飛躍的に上がる
他の手段として「シェルスクリプトで管理する」「ChefやPuppetなど他のツールを使う」などが考えられるが、
Ansibleは
・操作対象サーバに何もインストールしなくても使える
・RedHatがメンテナンスしている
・YAMLでシンプルに記述できる
という点で広く使われるようになってきている
■参考ページ
Ansible is Simple IT Automation
https://www.ansible.com/
Ansibleをはじめる人に。 - Qiita
https://qiita.com/t_nakayama0714/items/fe55ee56d6446f67113c
エージェントレスでシンプルな構成管理ツール「Ansible」入門 | さくらのナレッジ
https://knowledge.sakura.ad.jp/3124/
マンガでわかるAnsible
https://redhat.lookbookhq.com/jp_ansible_comic/ansible_manga_2
ある程度慣れたら、改めて以下を読んで内容を整理したい
Ansible実践入門 | DevelopersIO
https://dev.classmethod.jp/server-side/ansible/practice_ansible/
Ansibleで始めるインフラ構築自動化
https://www.slideshare.net/dcubeio/ansible-72056386
WebUI版として Ansbile AWX もある
Ansible AWX をインストールしてみよう | DevelopersIO
https://dev.classmethod.jp/server-side/ansible/rk-20180220-ansible-awx/
Ansible AWXを使ってみよう! | DevelopersIO
https://dev.classmethod.jp/server-side/ansible/ansible-awx_rk-20180225/
サービスごとに分散してしまった Ansible のコードを共通化する - WILLGATE tech blog
https://tech.willgate.co.jp/entry/2019/04/10/115500
無理をしないansible - Qiita
https://qiita.com/suicacello/items/ab5c80cb52bb9ff92704
「Infrastructure as Codeに疲れたので、僕たちが本来やりたかったことを整理する」を1年掛けて整理した
https://medium.com/@shogomuranushi/infrastructure-as-code%E3%81%AB%E7%96%B2%E3%82%8C%E3%81%9F%E3%81%...
AnsibleとVagrantで開発環境を構築する | さくらのナレッジ
https://knowledge.sakura.ad.jp/2882/
Ansibleで始めるインフラ構築自動化
https://www.slideshare.net/dcubeio/ansible-72056386
DockerとAnsibleの使い分けを手探りで考えてみた - Taste of Tech Topics
http://acro-engineer.hatenablog.com/entry/2015/12/01/120500
GitHub - ansible/ansible-examples
https://github.com/ansible/ansible-examples
■シンプルな使い方
自分自身に対してAnsibleを実行できる
Ansible自体のインストールと設定は手動で行う必要があるが、それ以降はコード化できる
■より高度な使い方
Ansible実行用に専用のサーバを建て、そこからリモートサーバを一から構築することもできる
(サーバに接続するための設定を、最初に行う必要はある)
サーバ構築を完全にコードで制御することもできるが、
ただし
・ポート番号の変更など、一筋縄ではいかないものがある
・Ansibleが対応していない(Amazon Linux 2のExtrasリポジトリなど)機能がある
・手動で設定すれば一瞬でも、コード化するとなると難しい場合がある
・例えば4台のWebサーバが動いているサービスでも、その4台のサーバ設定を同時に書き換えることができる
ただし間違ったコードを反映すると「4台同時にサーバが停止する」という事態になる
などがあるので注意
■無理をしない構築
手間を考えずに理想を追求すれば、恐らく
・Ansible実行用に専用のサーバを建てる
・Webサーバなどを半分ずつ一斉設定できるように、などの仕組みを作る
・AnsibleのコードテストのためにCIを用意し、Gitにプッシュすると自動でテストを走らせる
のような運用方法になると思われる
ただし会社の規模によっては、毎回これをやるのはなかなか大変。だと思っている
最先端を追うなら「DockerをAWSなどのマネージドサービスで本番運用」だと思われるが、
サービスが乱立している最中(と思っている)なのでまだ手を出していない
AWSだけでも「Docker自前運用」「ECS」「Fargate」「Kubernetes自前運用」「EKS」などの選択肢がある
いくつかは、1年後には早くも負債となっている可能性があるのでは
小規模な会社での最適な方法は何か、は日々考え中
ポート番号の変更やExtrasリポジトリなど、最低限の操作を手動で対応し、その後Ansibleで自動構築する
…という手段が現実的だと思われるのでそうしている
Ansible実行用サーバを用意して一括設定もできるが、
直近の案件では
「それぞれのサーバ内にAnsibleをインストールして、内部で1台ずつ実行する。都度結果も確認してから次へ行く」
としている
本番環境と検収環境と開発環境、同じリポジトリで管理する方法を目指したが難しそう
「検収環境はサーバの都合で特殊な設定が必要」「検収環境は他案件も含まれたサーバ」
などは珍しくないので、リポジトリ自体を分ける方がスムーズと思われる
特殊な設定を行う一台きりのサーバなら、手動で設定することも考える
「似たようなサーバを短期に大量に立ち上げて、しばらく管理し続ける必要がある」
という場合に、Ansibleは力を発揮する。と思っている
Gitからのプログラム配置と設定、データベースと作業ユーザの作成
…などもAnsibleで自動化することは不可能では無いが、それらは別管理とする方が無難。と思っている
コード化&自動化にこだわりすぎると、逆にメンテナンスが難しくなるので注意
Ansible自体が負債の技術となる可能性も常に考えておく
すでに構築されているサーバの場合、過去のやりかたを踏襲している
■作成済みPlaybook
Ansibleの理解がある程度進んだ後、以下に使いまわし用のPlaybookを作成した
サーバは1台だけ立ち上げて、自身のサーバを操作する方式としている
refirio/ansible-apache_php7_mariadb
https://github.com/refirio/ansible-apache_php7_mariadb
refirio/ansible-nginx_php7_mariadb
https://github.com/refirio/ansible-nginx_php7_mariadb
refirio/ansible-eccube
https://github.com/refirio/ansible-eccube