EVENT REPORTイベントレポート
ヒカラボレポートとは、開催されたヒカラボにおいて、登壇者が伝えたい講演内容を記事としてまとめたものです。ご参加された方はもちろん、ヒカラボに興味があるという方も是非ご覧ください。
ヒカラボレポートとは、開催されたヒカラボにおいて、登壇者が伝えたい講演内容を記事としてまとめたものです。ご参加された方はもちろん、ヒカラボに興味があるという方も是非ご覧ください。
突然ですが、『Ansible』という構成管理用ツールをご存知でしょうか?
構成管理用ツールとは、ご存知の通りサーバーの各種設定を自動的に実行するソフトウェアのこと。近年では、ChefやPuppetなどが話題を呼んでおり、それらに続いて注目を集めているのが、Ansibleです。 AnsibleについてGoogleトレンドで調べてみると、ここ3年で急激に人気が高まっていることが確認でき、名前を耳にしていたり、興味をお持ちの方も多いと思われます。
とはいえ、Ansibleで何ができるのか?Ansibleの具体的な使い方などについて踏み込んだ理解をお持ちでない方も多いはずです。
そこで、去る6月23日(火)に開催されたヒカ☆ラボでは、株式会社DMM.comラボにてシステム開発やサーバー構築を担当されている小島 法夫(おじま のりお)氏を講師としてお招きし、Ansibleの基本事項から同社での活用事例も含め、Ansibleビギナーに向けてレクチャーをしていただきました。
今回は当日の模様をダイジェストでお伝えいたしますので、ぜひご覧ください!
講演者プロフィール
まずは、アプリケーションの開発から本番リリースまでの環境についてお話したいと思います。
これは、開発環境を分かりやすく図にしたものです。
一番下に開発環境や本番サーバを用意するサーバチームがあって、その上にOSやミドルウェアの構成管理するチームがあって、さらにその上にソフトウェアをデプロイし、アプリケーションをリリースする私たちのようなアプリケーションディベロッパーがいる。
一般的には、このような環境の下で、皆さんは仕事をされているんじゃないかと思います。
まぁ本来なら、アプリケーション開発者はソフトウェアのデプロイだけをできればいいのかなと思っているんですけど、実際はそうでもなくて…。
例えば、仮想環境を併用している開発端末であれば、開発者はその部分についてもある程度理解している必要があるし、そうなってくると、OSやミドルウェアの構成管理についての知識も身につけておきたい。
このように、開発者は開発フェーズ全体を理解しておかなければならない状況にあります。
さらに開発者を苦しめているのが「自動化ツール」です。
一般的に、開発端末にはVagrantやHomebrew、OS周りではAnsibleやChef、ソフトウェアのデプロイにはCapistranoといった自動化ツールがよく採用されています。
このように自動化ツールがフェーズごとに異なっている場合、開発者はそれぞれの自動化ツールの特徴を覚えなければなりません。これは本当に大変です。
「一つのツールで済ませたいな」
きっと、誰もがそう思うのではないでしょうか?
その想いを叶えてくれるツールが、今日のメインテーマである『Ansible』です。
Ansibleでは、できることがとても多いです。例えば、ソフトウェアのデプロイ、OSやミドルウェアの構成管理、プロビジョニング、継続的デリバリーなど、さまざまなことができます。つまり、「Ansibleさえあれば、先ほど紹介した全ての自動化が叶う」ということです。
私自身がAnsibleを使い始めたとき、「Ansibleって構成管理ツールなのか?それともアプリケーションツールなのか?」と不思議に思ったことがありました。多分、初心者の方の中にも、同じように感じている方がいらっしゃると思います。
ですので、Ansibleについて詳しく説明する前に、Ansibleのコンセプトについてお話をしようと思います。
Ansibleの作者のブログには、「Ansibleは構成管理を超えている」といったことが書かれています。つまり「構成管理とアプリケーションデプロイのどちらか?」という話ではない、ということですね。実際に「Ansibleは構成管理でもあるし、アプリケーションデプロイのシステムでもある」といったようにブログでは紹介されています。
コマンドレベルでいろいろでき過ぎるAnsibleだからこそ、こういう思想的な部分は重要かと思います。
Ansibleは「べき等性」を持っています。ちなみに、「べき等性」とは「複数回実行しても同じ結果になる」というもので、構成管理をするうえでとても重要なバイブルとなります。
エージェントレスなのもAnsibleの強み。エージェントを入れずとも、SSHでできてしまうのが魅力です。特に、準備するファイルが少なくて済む、というところが良いですね。
また、タスク定義がYAML形式なのも、シンプルで良いですね。データ形式なので、誰が見ても分かりやすいです。まぁ、Capistranoほど複雑なプログラミングはできませんが、それでも大概の部分はできてしまいます。
Ansibleには豊富な標準モジュールが用意されています。
例えばcopy:だったら、Ansibleを動かしているコマンドにあるファイルを対象ホストにコピーするというコマンドがあったり、file:では、ファイルやディレクトリを作成、削除、属性設定するみたいなことができたり。
あと、command:を使えば、任意のコマンドを実行することもできます。その他、get_url:は、HTTP/HTTPS/FTPでファイルをダウンロードすることが可能です。
roleとは、複数のPlaybookをまとめて再利用や共有しやすくする機能。ある目的を果たすために「role」という概念があって、それをシェアすることで人が作ったものを自分も使えるようになります。roleにグルーピングすることで、他ユーザとのシェアが簡単になるのが嬉しいですね。
Ansibleを使う際に準備するファイルは「inventory」「playbook」「ansible.cfg」の3つです。
まずplaybook。主に構成管理や、アプリケーションデプロイのときなどに使います。
これがあれば、一連のタスクをまとめて定義することが可能です。
次にinventory。これは、実行対象のホスト群を定義するもので、ホスト面をグルーピングしたりレイドするときに使います。さっき「AnsibleはYAML形式だ」といいましたが、inventoryはini形式となっています。「シンプルな方がいいだろう」ということでiniファイルが選ばれているようです。
3つ目はansible.cfg。これは、Ansible自体の設定ファイルですね。
一番重要なのがplaybook、次がinventoryという感じで意識してもらうと良いと思います。
最後に、弊社における活用事例についてご紹介をしたいと思います。
会社全体としての活用事例としては、Macの環境構築に使っています。
その際は、HomebrewモジュールというMac用のモジュールを使用します。Homebrewで変数にして「Erlang入れます」とか「homebrew_caskを入れといてJavaを入れます」といった感じでさっとAnsibleを書いてしまえば、Macの環境構築は終了です。
「これまで開発初日の時間は全て環境設定に費やしていたけど、Ansibleでさっと流すだけで環境ができあがるようになった!」
そんな幸せなことになるんじゃないか?ということでAnsibleを取り入れています。
「Vagrantで仮想マシンを構築します」というのは一般的かもしれませんが…。構築の際、Ansible provisionerを使うと便利です。それによりAnsibleのplaybookを流せるようになります。
YAML形式のAnsibleは、運用の方に理解してもらいやすいというメリットがあります。実際にAnsibleを採用している私のグループでは、リポジトリのサーバにAnsibleを取り込むと、インフラがそれを見て本番環境を構築してくれます。
「開発環境を作る部署」と「本番環境を作る部署」とは当然分かれていますし、やっていることも別ですが、Ansibleで一つの流れをつくることで一元化される、というのが非常にいいところだと思っています。そして、「今後、Ansibleを共通言語にしていきたいな」と考えています。
今日はAnsibleのコンセプトと基本的な使い方、あと、弊社におけるAnsibleの活用事例についてご紹介させていただきました。今日の話が皆様の今後の開発に役立てば幸いです。
ありがとうございました。