1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

アプリケーションのデプロイにAWX + Ansibleを活用してみた話

はじめまして! 2018年4月に新卒でインフラチームへ配属された int_sorarinu です!
この記事は Willgate Advent Calendar の19日目の記事です!

はじめに

皆さんはアプリケーションのデプロイ手法というものに頭を悩ませ夢を膨らませていた経験はないでしょうか。
かく言う私もこれまで Capistrano や CodeDeploy などを活用して夢を膨らませていた経験があり、その中で今回 Ansible に夢を託してみたという記事を書きます。

Ansible

オープンソースの構成管理ツールで主に大量なサーバに対してソフトウェアをインストールしたり、設定ファイルを設置したりするのに利用されるものです。

基本的にはサーバの構成管理なのでアプリケーションのデプロイに利用されることはあまりないのではないでしょうか。
実際私も「Ansibleでアプリケーションのデプロイをやってます!」というところは見たことも聞いたこともありません。

しかし、Ansibleに夢を託す為にも今回はペライチのPHPソースをAnsibleでデプロイしてみました。

デプロイ用Playbook

Playbook
---

- name: git clone Repository
  git: repo=git@bitbucket.org:xxxxxxxxxxx/xxxxxxxx.git dest=/usr/src/xxxxx force=yes

- name: chown nginx:nginx /usr/src/xxxxx
  file: path=/usr/src/xxxxx state=directory owner=nginx group=nginx mode=0755 recurse=yes

- name: make symbolic link /usr/src/xxxxx/index.php to /var/www/app/index.php
  file: src=/usr/src/xxxxx/index.php dest=/var/www/app/index.php owner=nginx group=nginx state=link

やっていることは非常に単純で、 git clone してきてドキュメントルートに対してシンボリックリンクを作成しているだけです。実際にプロダクトへ導入するとなった際には、マイグレーションのコマンドを発行したりする必要があります。

Ansibleのコードは出来ましたが、実際にデプロイする際に ansible-playbook -i servers site.yml -l appservers -u username -k -K --vault-password-file vault_pass --tags "deploy" のような長いコマンドを一々発行することになります。

実際のプロダクトでアプリケーションのデプロイを行う人の身にもなってあげれば、デプロイシェルを用意するなりChatOpsを導入するなりしなければいけません。

そこで今回、 AWX を利用してデプロイ環境を整えることにしました。

AWX

RedHat社が提供しているAnsibleを拡張するためのソリューション Ansible Tower のOSS版で、Playbookの実行結果を可視化できるダッシュボードやロールベースのアクセス権限管理などができるツール。
AWX Git Repository

スクリーンショット 2018-12-19 13.32.52.png

AWXの管理画面から、認証情報やインベントリなどの各種必要な情報を作成し、最後にテンプレートを作成することで利用ができるようになります。

スクリーンショット 2018-12-19 13.38.50.png

作成したテンプレートは赤丸で囲ったロケットマークをクリックするだけで実行されます。
スクリーンショット 2018-12-19 13.41.16.png

また、LDAPアカウントとAWXアカウントを紐づけておくことができるため、LDAPのユーザグループなどによって実行できるPlaybookなどが設定できるため、権限管理なども容易にできるようになります。(開発者は Dry-Run だけ流せるみたいなことが出来ます)

おわりに

雑になってしまいましたが、アプリケーションのデプロイでAWXとAnsibleを活用する方法をまとめてみました!
もちろんCapistranoやCodeDeployなどを利用することのメリットも多いですが、こうしてAnsibleに夢を託すことも面白いと思います。

デプロイ手法にお悩みの方がいらっしゃいましたら夢を託してみてはいかがでしょうか!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?