はじめに
-
この記事は、自分が今年ゆめみで初めて
Ansible
を使った時の思い出を書きつづっています. -
AnsibleはPythonで書かれている構成管理ツールです.
-
ここでは個人的な導入背景とかを綴っていきます.
- コマンド説明とか、チューニングとかの説明は?
- 公式やQiitaにたくさんありましたのでそちらで.
- コマンド説明とか、チューニングとかの説明は?
背景(導入まで)
- 以下の背景で、構成管理ツールを使うことを考えました
- 構築・運用してるシステムがあって
- しばらくして段階的に状況が変わってきました
- 日本以外の複数国に展開
- 諸事情によりど新規でインフラ構築の必要に迫られる
- 自分以外の人への引き継ぎが必要になる
- 以下のようなことを構成決めて管理・共有したいと思った
- 頻繁に行う作業のスクリプト化
- デプロイ、M/Wインストール・設定、DBへのデータ投入, AWS関連作業など
- 設定ファイルなど資材の管理
- 対象サーバ、設定などパラメータ管理
- 大きなスクリプトは役割や用途ごとに分割(分割単位)
- 秘匿情報も入ってるので暗号化ルール
- 複数サーバに対して作業する場合の方法
- ログ残したりしたい
- 頻繁に行う作業のスクリプト化
なぜ Ansible
- 自分は以下の理由でAnsibleを使うことにしました(正直困っていたので、なんでも良かったのですが、、)
- 背景に記載した、必要だと思うルールを定めてくれること(ルール制定・共有コストを省略)
- たくさんの人に使われている(社会的信用,説明しやすい)
- 情報が多い(学習しやすい)
- お金がかからない(有償だと導入のハードルになる)
- プログラミング言語の縛りがない(ない方が望ましい)
- インストールと使い方が簡単(可能な限り)
- 商用の鍵など秘匿情報を預けるような(いわゆるSaaS)は避けたい(承認フローの回避)
振り返って
-
気づくとほぼYamlを書いていました.
- Ansible(構文がyml)
- Docker Compose(ymlで書く)
- AWS CloudFormation(ymlでも書ける)
-
Ansibleで作成するファイルの一部はフォーマットがYAMLではない
- 設定ファイル(ansible.cfg)
- 設定対象サーバを記述するinventoryファイル(2.1以降であればyamlでも問題なく書ける)
- YAMLだけで書けると個人的には楽
-
やりたかったことは一通りできて嬉しかったです.
- 優先度高いものは共有できたと思っている
- 全自動化とか、一番良い形で共有できたわけではない分があり残念
-
あ、GUIが無償で使えた
- Ansible SemaphoreというOSS (MIT License)、無償で使えるGUI.
- Ansible Towerがあるが、これは有償
- Githubページはこちら
- Ansible SemaphoreというOSS (MIT License)、無償で使えるGUI.
-
Ansible-Semaphore dockerで動かせて幸せでした.
-
docker-compose.ymlが下記にある為使わせて頂くことにしました
https://github.com/ansible-semaphore/semaphore
-
一部変更して使いました
- MySQLにtaskの設定などを設定済みのデータを初期投入
- .ssh, ansible-vaultのパスファイルのマウント
- ansible-vault pass、ssh接続情報は管理を分けたかったので
- ホストサーバをマウントする形にした
- Nginxのproxyサーバは除去 (ローカルで動かす分には不要(そもそも動かなかった))
-
幸せを感じた画面キャプチャ(リポジトリ名などは情報保護のため変更してます)
-
-
Web API(認証付き)で、HTTP(S)経由でタスク実行もできた
- こういう内容
curl -X POST \
--cookie-jar /tmp/semaphore-cookie \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d '{"auth": "admin@localhost","password": "yumemi"}'
"http://localhost:18081/api/auth/login"
TOKEN=$(curl -Ss -X POST -b /tmp/semaphore-cookie --header 'Content-Type: application/json' --header 'Accept: application/json' "http://localhost:18081/api/user/tokens" | jq -rc ".id")
curl -Ss -X POST
--header "Authorization: Bearer $TOKEN" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d "{\"template_id\":1,\"debug\":false,\"dry_run\":true}" \
"http://localhost:18081/api/project/1/tasks"
参考
- 公式
- Ansible徹底入門 (下記、著者インタビュー 2017)
以上, Ansibleと出会えてよかった2017振り返りですm(_ _)m