Ansible Galaxyを使ったRoleの取得
こんにちは。株式会社SHIFT、自動化エンジニアの水谷です。
前回の記事ではPlaybookをRoleに分割して作成し、再利用性を高める方法について書きましたが、今回は「Ansible-Galaxy」というRoleの共有を行う無料サイトから、コミュニティーで開発されたRoleをダウンロードして自分のPlaybookに組み込んで使う方法を紹介したいと思います。
Ansible GalaxyでRoleを探す
Ansible Galaxyでは、コミュニティで開発されたRoleが、実に2万個以上公開されています。この中にはソフトウェアメーカーが自社のソフトウェアをPlaybookでインストールや設定が行えるように公開しているものから、個人で作成した、あまり広くテストされていないRoleもあったりします。また、同じ目的を果たすためのRoleが複数公開されていることも多々あるので、しっかり自分の目的に合っていて、安全に使えるものを探してダウンロードすることが重要になります。
では、さっそくAnsible Galaxyのサイト(https://galaxy.ansible.com/)を見てみましょう。
残念ながら日本語サイトはありませんが、シンプルですのでそれほど苦労せず欲しいRoleを見つけることができると思います。
では、左上の「Search」リンクをクリックして、Roleを1つ探してみましょう。
これがAnsible Galaxyの検索ページになります。Ansible Galaxyでは、Role以外にCollection(Roleだけでなく、Playbookやモジュールなどを含めたパッケージコンテンツ)のダウンロードもでき、この状態ではRoleとCollectionが混ざって表示されています。
今回はRoleを探したいので、「Filters」リンクをクリックして「Type」に「Role」を選択してください。これでRoleだけを検索できます。
では、例としてWebサーバの1つで有名な「nginx」をインストールするRoleを探してみます。検索ボックスに"install nginx"と入力してENTERキーを押すと、下のように963個のRoleが見つかりました。
見つかり過ぎるのも困りもので、どれを選んでいいのか迷ってしまいます。選ぶヒントとしては、ダウンロード数やスコア(5点満点)、それからTravis CIで実行されたテスト結果が表示されていますので、これを見て、良さそうなものをクリックしてください。
今回は無難に(?)行きたいと思い、nginxincが提供しているオフィシャルのRoleを選択してみました。
ここでは、対応するAnsibleのバージョンや、対応OSなどが表示されていますので、実行しようとしている環境に対応していることを確認します。
問題がなければ、「Installation」欄にある "$ ansible-galaxy install nginxinc.nginx" をコピーしておきます(その右にあるコピーアイコンをクリックしても、クリップボードにコピーされます)。これが、このRoleのインストールコマンドになります。
Roleのインストール
では、Ubuntu上で実行してみます。コマンドを実行すると、このようにRoleがダウンロードされて、/home/mizutani/.ansible/roles/nginxinc.nginx にRoleが配置されました(もちろんユーザー名の部分は環境によって変わります)。簡単ですね。
オフィシャルRoleを使ってnginxをインストールする
Roleの準備ができたので、さっそくこれを使ってnginxをインストールしてみましょう。
用意したPlaybookはこんなミニマムなものです。
---
- name: test nginx roll
hosts: localhost
gather_facts: yes
become: yes
roles:
- role: nginxinc.nginx
今回はテストとして、hostsにlocalhostを指定しているので、このPlaybookを実行すると、そのマシンにnginxがインストールされます。他のマシンにインストールする場合は、inventoryファイルを用意してください。
なお、Role自体は~/.ansible/rolesの下に配置されていますが、デフォルトでこのディレクトリ下を探してくれますので、Pathを記述する必要はありません。
では実行してみましょう。
Playbookで”gather_facts: yes”としてファクトを取得しているので、OSを自動判断して、Debian/Ubuntu用のnginxがインストールされていきます。
実行が終わって、Webブラウザ上で"localhost"にアクセスしてみると、ご覧の通りnginxのデフォルトページが表示されました。
もちろん、インストールだけでなく、nginxの各種設定も変数を設定することでできるのですが、数が多いのでここでは省略させていただきます。詳しくはこのRoleのGitHub(https://github.com/nginxinc/ansible-role-nginx)などを見てください。
なお、nginxをアンインストールするには、"nginx_state"変数を"absent"に設定して実行すればOKです(下はその例)。
---
- name: uninstall nginx
hosts: localhost
gather_facts: yes
become: yes
vars:
nginx_state: absent
roles:
- role: nginxinc.nginx
Ansible Galaxyをうまく活用して、共有されているRoleを使っていくことで、Playbookを短期間に作成することができます。
ただ、ものによっては変数で必要な設定ができなかったり、逆に指定できる変数が多すぎるものもあり(この場合はドキュメントも長くてわかりにくかったりします)、ちょうど良い自分に合ったRoleを見つけるのは難しかったりする場合も。
それでも、Ansible Galaxyを眺めていると、こんなこともAnsibleでできるんだ、と新たな発見があったり、また、良いRoleをじっくり見てみると、いろいろな工夫が見つかったりして、Playbookを書く良い勉強にもなります。皆さんもぜひ積極的にAnsible Galaxyを活用してみてください。
――――――――――――――――――――――――――――――――――
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/