はじめまして! 2018年4月に新卒でインフラチームへ配属された int_sorarinu です!
この記事は Willgate Advent Calendar の19日目の記事です!
はじめに
皆さんはアプリケーションのデプロイ手法というものに頭を悩ませ夢を膨らませていた経験はないでしょうか。
かく言う私もこれまで Capistrano や CodeDeploy などを活用して夢を膨らませていた経験があり、その中で今回 Ansible に夢を託してみたという記事を書きます。
Ansible
オープンソースの構成管理ツールで主に大量なサーバに対してソフトウェアをインストールしたり、設定ファイルを設置したりするのに利用されるものです。
基本的にはサーバの構成管理なのでアプリケーションのデプロイに利用されることはあまりないのではないでしょうか。
実際私も「Ansibleでアプリケーションのデプロイをやってます!」というところは見たことも聞いたこともありません。
しかし、Ansibleに夢を託す為にも今回はペライチのPHPソースをAnsibleでデプロイしてみました。
デプロイ用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
AWXの管理画面から、認証情報やインベントリなどの各種必要な情報を作成し、最後にテンプレートを作成することで利用ができるようになります。
作成したテンプレートは赤丸で囲ったロケットマークをクリックするだけで実行されます。
また、LDAPアカウントとAWXアカウントを紐づけておくことができるため、LDAPのユーザグループなどによって実行できるPlaybookなどが設定できるため、権限管理なども容易にできるようになります。(開発者は Dry-Run だけ流せるみたいなことが出来ます)
おわりに
雑になってしまいましたが、アプリケーションのデプロイでAWXとAnsibleを活用する方法をまとめてみました!
もちろんCapistranoやCodeDeployなどを利用することのメリットも多いですが、こうしてAnsibleに夢を託すことも面白いと思います。
デプロイ手法にお悩みの方がいらっしゃいましたら夢を託してみてはいかがでしょうか!