EVENT REPORTイベントレポート

ヒカラボレポートとは、開催されたヒカラボにおいて、登壇者が伝えたい講演内容を記事としてまとめたものです。ご参加された方はもちろん、ヒカラボに興味があるという方も是非ご覧ください。

イベントレポートvol.34

アプリケーション開発者は要チェック!Ansible入門 ~開発環境構築を楽にする!DMM.com Laboにおける活用事例~

2017/07/19(水)更新

  • このエントリーをはてなブックマークに追加

突然ですが、『Ansible』という構成管理用ツールをご存知でしょうか?

構成管理用ツールとは、ご存知の通りサーバーの各種設定を自動的に実行するソフトウェアのこと。近年では、ChefやPuppetなどが話題を呼んでおり、それらに続いて注目を集めているのが、Ansibleです。 AnsibleについてGoogleトレンドで調べてみると、ここ3年で急激に人気が高まっていることが確認でき、名前を耳にしていたり、興味をお持ちの方も多いと思われます。

とはいえ、Ansibleで何ができるのか?Ansibleの具体的な使い方などについて踏み込んだ理解をお持ちでない方も多いはずです。

そこで、去る6月23日(火)に開催されたヒカ☆ラボでは、株式会社DMM.comラボにてシステム開発やサーバー構築を担当されている小島 法夫(おじま のりお)氏を講師としてお招きし、Ansibleの基本事項から同社での活用事例も含め、Ansibleビギナーに向けてレクチャーをしていただきました。

今回は当日の模様をダイジェストでお伝えいたしますので、ぜひご覧ください! 

講演者プロフィール

株式会社DMM.comラボ
小島 法夫 氏
製造業ベンチャー、IPTVプロバイダを経て2014年3月にDMM.comラボへ入社。 検索システムの開発を担当。最近では Word2vec を使って面白いことが出来ないか研究中。

 

『Ansible』が、覚えることの多いアプリケーション開発者を救う

アプリケーションエンジニアを取り巻く環境

まずは、アプリケーションの開発から本番リリースまでの環境についてお話したいと思います。

これは、開発環境を分かりやすく図にしたものです。
一番下に開発環境や本番サーバを用意するサーバチームがあって、その上にOSやミドルウェアの構成管理するチームがあって、さらにその上にソフトウェアをデプロイし、アプリケーションをリリースする私たちのようなアプリケーションディベロッパーがいる。
一般的には、このような環境の下で、皆さんは仕事をされているんじゃないかと思います。

まぁ本来なら、アプリケーション開発者はソフトウェアのデプロイだけをできればいいのかなと思っているんですけど、実際はそうでもなくて…。

例えば、仮想環境を併用している開発端末であれば、開発者はその部分についてもある程度理解している必要があるし、そうなってくると、OSやミドルウェアの構成管理についての知識も身につけておきたい。
このように、開発者は開発フェーズ全体を理解しておかなければならない状況にあります。

さらに開発者を苦しめているのが「自動化ツール」です。

一般的に、開発端末にはVagrantやHomebrew、OS周りではAnsibleやChef、ソフトウェアのデプロイにはCapistranoといった自動化ツールがよく採用されています。
このように自動化ツールがフェーズごとに異なっている場合、開発者はそれぞれの自動化ツールの特徴を覚えなければなりません。これは本当に大変です。

「一つのツールで済ませたいな」

きっと、誰もがそう思うのではないでしょうか?
その想いを叶えてくれるツールが、今日のメインテーマである『Ansible』です。

Ansibleができること

Ansibleでは、できることがとても多いです。例えば、ソフトウェアのデプロイ、OSやミドルウェアの構成管理、プロビジョニング、継続的デリバリーなど、さまざまなことができます。つまり、「Ansibleさえあれば、先ほど紹介した全ての自動化が叶う」ということです。

 

Ansibleは「構成管理ツール」?それとも「アプリケーションデプロイツール」?

私自身が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により、他ユーザーとのシェアが簡単に

roleとは、複数のPlaybookをまとめて再利用や共有しやすくする機能。ある目的を果たすために「role」という概念があって、それをシェアすることで人が作ったものを自分も使えるようになります。roleにグルーピングすることで、他ユーザとのシェアが簡単になるのが嬉しいですね。

 

準備するファイルは「inventory」「playbook」「ansible.cfg」の3つ

Ansibleを使う際に準備するファイルは「inventory」「playbook」「ansible.cfg」の3つです。

まずplaybook。主に構成管理や、アプリケーションデプロイのときなどに使います。
これがあれば、一連のタスクをまとめて定義することが可能です。

次にinventory。これは、実行対象のホスト群を定義するもので、ホスト面をグルーピングしたりレイドするときに使います。さっき「AnsibleはYAML形式だ」といいましたが、inventoryはini形式となっています。「シンプルな方がいいだろう」ということでiniファイルが選ばれているようです。

3つ目はansible.cfg。これは、Ansible自体の設定ファイルですね。

一番重要なのがplaybook、次がinventoryという感じで意識してもらうと良いと思います。

 

DMM社では、Macの環境構築や仮想マシンの環境構築にAnsibleを活用

Macの環境構築

最後に、弊社における活用事例についてご紹介をしたいと思います。

会社全体としての活用事例としては、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の活用事例についてご紹介させていただきました。今日の話が皆様の今後の開発に役立てば幸いです。
ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • 正社員求人・転職支援はこちら
  • 年収800万円以上の転職を目指す エキスパートのハイクラス転職 エンジニア・クリエイター専門 レバテックエキスパート