Memo

メモ > サーバ > 各論: 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

Advertisement