見出し画像

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/)を見てみましょう。

画像1

残念ながら日本語サイトはありませんが、シンプルですのでそれほど苦労せず欲しいRoleを見つけることができると思います。

では、左上の「Search」リンクをクリックして、Roleを1つ探してみましょう。

画像2

これがAnsible Galaxyの検索ページになります。Ansible Galaxyでは、Role以外にCollection(Roleだけでなく、Playbookやモジュールなどを含めたパッケージコンテンツ)のダウンロードもでき、この状態ではRoleとCollectionが混ざって表示されています。

今回はRoleを探したいので、「Filters」リンクをクリックして「Type」に「Role」を選択してください。これでRoleだけを検索できます。

画像3

では、例としてWebサーバの1つで有名な「nginx」をインストールするRoleを探してみます。検索ボックスに"install nginx"と入力してENTERキーを押すと、下のように963個のRoleが見つかりました。

画像4

見つかり過ぎるのも困りもので、どれを選んでいいのか迷ってしまいます。選ぶヒントとしては、ダウンロード数やスコア(5点満点)、それからTravis CIで実行されたテスト結果が表示されていますので、これを見て、良さそうなものをクリックしてください。

今回は無難に(?)行きたいと思い、nginxincが提供しているオフィシャルのRoleを選択してみました。

画像5

ここでは、対応するAnsibleのバージョンや、対応OSなどが表示されていますので、実行しようとしている環境に対応していることを確認します。

問題がなければ、「Installation」欄にある "$ ansible-galaxy install nginxinc.nginx" をコピーしておきます(その右にあるコピーアイコンをクリックしても、クリップボードにコピーされます)。これが、このRoleのインストールコマンドになります。

Roleのインストール

では、Ubuntu上で実行してみます。コマンドを実行すると、このようにRoleがダウンロードされて、/home/mizutani/.ansible/roles/nginxinc.nginx にRoleが配置されました(もちろんユーザー名の部分は環境によって変わります)。簡単ですね。

画像6

オフィシャル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を記述する必要はありません。

では実行してみましょう。

画像7

Playbookで”gather_facts: yes”としてファクトを取得しているので、OSを自動判断して、Debian/Ubuntu用のnginxがインストールされていきます。

実行が終わって、Webブラウザ上で"localhost"にアクセスしてみると、ご覧の通りnginxのデフォルトページが表示されました。

画像8

もちろん、インストールだけでなく、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を活用してみてください。

――――――――――――――――――――――――――――――――――

執筆者プロフィール:水谷裕一
大手外資系IT企業で15年間テストエンジニアとして、多数のプロジェクトでテストの自動化作業を経験。その後画像処理系ベンチャーを経てSHIFTに入社。
SHIFTでは、テストの自動化案件を2件こなした後、株式会社リアルグローブ・オートメーティッド(RGA)にPMとして出向中。RGAでは主にAnsibleに関する案件をプレーイングマネジャーとして担当している。

お問合せはお気軽に
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/